Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
4
Task/Create-an-HTML-table/00-META.yaml
Normal file
4
Task/Create-an-HTML-table/00-META.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
category:
|
||||
- HTML
|
||||
from: http://rosettacode.org/wiki/Create_an_HTML_table
|
||||
8
Task/Create-an-HTML-table/00-TASK.txt
Normal file
8
Task/Create-an-HTML-table/00-TASK.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Create an HTML table.
|
||||
* The table body should have at least three rows of three columns.
|
||||
* Each of these three columns should be labelled "X", "Y", and "Z".
|
||||
* An extra column should be added at either the extreme left or the extreme right of the table that has no heading, but is filled with sequential row numbers.
|
||||
* The rows of the "X", "Y", and "Z" columns should be filled with random or sequential integers having 4 digits or less.
|
||||
* The numbers should be aligned in the same fashion for all columns.
|
||||
<br><br>
|
||||
|
||||
15
Task/Create-an-HTML-table/11l/create-an-html-table.11l
Normal file
15
Task/Create-an-HTML-table/11l/create-an-html-table.11l
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
UInt32 seed = 0
|
||||
F nonrandom(n)
|
||||
:seed = 1664525 * :seed + 1013904223
|
||||
R Int(:seed >> 16) % n
|
||||
|
||||
F rand9999()
|
||||
R nonrandom(9000) + 1000
|
||||
|
||||
F tag(tag, txt, attr = ‘’)
|
||||
R ‘<’tag‘’attr‘>’txt‘</’tag‘>’
|
||||
|
||||
V header = tag(‘tr’, ‘,X,Y,Z’.split(‘,’).map(txt -> tag(‘th’, txt)).join(‘’))"\n"
|
||||
V rows = (1..5).map(i -> tag(‘tr’, tag(‘td’, i, ‘ style="font-weight: bold;"’)‘’(0.<3).map(j -> tag(‘td’, rand9999())).join(‘’))).join("\n")
|
||||
V table = tag(‘table’, "\n"header‘’rows"\n")
|
||||
print(table)
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
* Create an HTML table 19/02/2017
|
||||
CREHTML CSECT
|
||||
USING CREHTML,R13
|
||||
B 72(R15)
|
||||
DC 17F'0'
|
||||
STM R14,R12,12(R13)
|
||||
ST R13,4(R15)
|
||||
ST R15,8(R13)
|
||||
LR R13,R15 end of prolog
|
||||
LA R8,RND
|
||||
XPRNT PGBODY,64 <html><head></head><body>
|
||||
XPRNT PGTAB,64 <table border=1 ... cellspacing=0>
|
||||
SR R6,R6 row=0
|
||||
DO WHILE=(C,R6,LE,NROWS) do row=0 to nrows
|
||||
IF LTR,R6,Z,R6 THEN if row=0
|
||||
XPRNT PGTRTH,64 <tr><th></th>
|
||||
ELSE , else
|
||||
XDECO R6,XDEC edit row
|
||||
MVC PGTR+8(1),XDEC+11 output row heading
|
||||
XPRNT PGTR,64 <tr><th>.</th>
|
||||
ENDIF , endif
|
||||
LA R7,1 col=1
|
||||
DO WHILE=(C,R7,LE,NCOLS) do col=1 to ncols
|
||||
IF LTR,R6,Z,R6 THEN if row=0
|
||||
LR R1,R7 col
|
||||
LA R4,TCAR-1(R1) tcar(col)
|
||||
MVC PGTH+4(1),0(R4) output heading
|
||||
XPRNT PGTH,64 <th>.</th>
|
||||
ELSE , else
|
||||
L R2,0(R8) value
|
||||
XDECO R2,XDEC edit value
|
||||
MVC PGTD+18(4),XDEC+8 output cell value
|
||||
XPRNT PGTD,64 <td align="right">....</td>
|
||||
LA R8,4(R8) next value
|
||||
ENDIF , endif
|
||||
LA R7,1(R7) col++
|
||||
ENDDO , enddo col
|
||||
XPRNT PGETR,64 </tr>
|
||||
LA R6,1(R6) row++
|
||||
ENDDO , enddo row
|
||||
XPRNT PGETAB,64 </table>
|
||||
XPRNT PGEBODY,64 </body></html>
|
||||
L R13,4(0,R13) epilog
|
||||
LM R14,R12,12(R13)
|
||||
XR R15,R15
|
||||
BR R14 exit
|
||||
NROWS DC F'4' number of rows
|
||||
NCOLS DC F'3' number of columns
|
||||
TCAR DC CL3'XYZ'
|
||||
RND DC F'7055',F'5334',F'5795',F'2895',F'3019',F'7747'
|
||||
DC F'140',F'7607',F'8144',F'7090',F'475',F'4140'
|
||||
PGBODY DC CL64'<html><head></head><body>'
|
||||
PGTAB DC CL64'<table border=1 cellpadding=10 cellspacing=0>'
|
||||
PGTRTH DC CL64'<tr><th></th>'
|
||||
PGTH DC CL64'<th>.</th>'
|
||||
PGETR DC CL64'</tr>'
|
||||
PGTR DC CL64'<tr><th>.</th>'
|
||||
PGTD DC CL64'<td align="right">....</td>'
|
||||
PGETAB DC CL64'</table>'
|
||||
PGEBODY DC CL64'</body></html>'
|
||||
XDEC DS CL12
|
||||
YREGS
|
||||
END CREHTML
|
||||
78
Task/Create-an-HTML-table/ALGOL-68/create-an-html-table.alg
Normal file
78
Task/Create-an-HTML-table/ALGOL-68/create-an-html-table.alg
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
INT not numbered = 0; # possible values for HTMLTABLE row numbering #
|
||||
INT numbered left = 1; # " " " " " " #
|
||||
INT numbered right = 2; # " " " " " " #
|
||||
|
||||
INT align centre = 0; # possible values for HTMLTABLE column alignment #
|
||||
INT align left = 1; # " " " " " " #
|
||||
INT align right = 2; # " " " " " " #
|
||||
|
||||
# allowable content for the HTML table - extend the UNION and TOSTRING #
|
||||
# operator to add additional modes #
|
||||
MODE HTMLTABLEDATA = UNION( INT, REAL, STRING );
|
||||
OP TOSTRING = ( HTMLTABLEDATA content )STRING:
|
||||
CASE content
|
||||
IN ( INT i ): whole( i, 0 )
|
||||
, ( REAL r ): fixed( r, 0, 0 )
|
||||
, ( STRING s ): s
|
||||
OUT "Unsupported HTMLTABLEDATA content"
|
||||
ESAC;
|
||||
# MODE to hold an html table #
|
||||
MODE HTMLTABLE = STRUCT( FLEX[ 0 ]STRING headings
|
||||
, FLEX[ 0, 0 ]HTMLTABLEDATA data
|
||||
, INT row numbering
|
||||
, INT column alignment
|
||||
, INT cell spacing
|
||||
, INT col spacing
|
||||
, INT border
|
||||
);
|
||||
# write an html table to a file #
|
||||
PROC write html table = ( REF FILE f, HTMLTABLE t )VOID:
|
||||
BEGIN
|
||||
STRING align = "align="""
|
||||
+ CASE column alignment OF t IN "left", "right" OUT "center" ESAC
|
||||
+ """";
|
||||
PROC th element = ( REF FILE f, HTMLTABLE t, STRING content )VOID:
|
||||
put( f, ( "<th " + align + ">" + content + "</th>", newline ) );
|
||||
PROC td element = ( REF FILE f, HTMLTABLE t, HTMLTABLEDATA content )VOID:
|
||||
put( f, ( "<td " + align + ">" + TOSTRING content + "</td>", newline ) );
|
||||
|
||||
# table element #
|
||||
put( f, ( "<table"
|
||||
+ " cellspacing=""" + whole( cell spacing OF t, 0 ) + """"
|
||||
+ " colspacing=""" + whole( col spacing OF t, 0 ) + """"
|
||||
+ " border=""" + whole( border OF t, 0 ) + """"
|
||||
+ ">"
|
||||
, newline
|
||||
)
|
||||
);
|
||||
# table headings #
|
||||
put( f, ( "<tr>", newline ) );
|
||||
IF row numbering OF t = numbered left THEN th element( f, t, "" ) FI;
|
||||
FOR col FROM LWB headings OF t TO UPB headings OF t DO
|
||||
th element( f, t, ( headings OF t )[ col ] )
|
||||
OD;
|
||||
IF row numbering OF t = numbered right THEN th element( f, t, "" ) FI;
|
||||
put( f, ( "</tr>", newline ) );
|
||||
# table rows #
|
||||
FOR row FROM 1 LWB data OF t TO 1 UPB data OF t DO
|
||||
put( f, ( "<tr>", newline ) );
|
||||
IF row numbering OF t = numbered left THEN th element( f, t, whole( row, 0 ) ) FI;
|
||||
FOR col FROM 2 LWB data OF t TO 2 UPB data OF t DO
|
||||
td element( f, t, ( data OF t )[ row, col ] )
|
||||
OD;
|
||||
IF row numbering OF t = numbered right THEN th element( f, t, whole( row, 0 ) ) FI;
|
||||
put( f, ( "</tr>", newline ) )
|
||||
OD;
|
||||
# end of table #
|
||||
put( f, ( "</table>", newline ) )
|
||||
END # write html table # ;
|
||||
|
||||
# create an HTMLTABLE and print it to standard output #
|
||||
HTMLTABLE t;
|
||||
cell spacing OF t := col spacing OF t := 0;
|
||||
border OF t := 1;
|
||||
column alignment OF t := align right;
|
||||
row numbering OF t := numbered left;
|
||||
headings OF t := ( "A", "B", "C" );
|
||||
data OF t := ( ( 1001, 1002, 1003 ), ( 21, 22, 23 ), ( 201, 202, 203 ) );
|
||||
write html table( stand out, t )
|
||||
9
Task/Create-an-HTML-table/AWK/create-an-html-table.awk
Normal file
9
Task/Create-an-HTML-table/AWK/create-an-html-table.awk
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/awk -f
|
||||
BEGIN {
|
||||
print "<table>\n <thead align = \"right\">"
|
||||
printf " <tr><th></th><td>X</td><td>Y</td><td>Z</td></tr>\n </thead>\n <tbody align = \"right\">\n"
|
||||
for (i=1; i<=10; i++) {
|
||||
printf " <tr><td>%2i</td><td>%5i</td><td>%5i</td><td>%5i</td></tr>\n",i, 10*i, 100*i, 1000*i-1
|
||||
}
|
||||
print " </tbody>\n</table>\n"
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
DEFINE ROW_COUNT="4"
|
||||
DEFINE COL_COUNT="3"
|
||||
|
||||
PROC Main()
|
||||
CHAR ARRAY headers=[0 'X 'Y 'Z]
|
||||
BYTE row,col
|
||||
INT v
|
||||
|
||||
PrintE("<html>")
|
||||
PrintE("<head></head>")
|
||||
PrintE("<body>")
|
||||
PrintE("<table border=1>")
|
||||
PrintE("<thead align=""center"">")
|
||||
|
||||
Print("<tr><th></th>")
|
||||
FOR col=1 TO COL_COUNT
|
||||
DO
|
||||
PrintF("<th>%C</th>",headers(col))
|
||||
OD
|
||||
PrintE("</tr>")
|
||||
PrintE("</thead>")
|
||||
PrintE("<tbody align=""right"">")
|
||||
|
||||
FOR row=1 TO ROW_COUNT
|
||||
DO
|
||||
PrintF("<tr><th>%B</th>",row)
|
||||
FOR col=1 TO COL_COUNT
|
||||
DO
|
||||
v=800+Rand(0)*5
|
||||
PrintF("<td>%I</td>",v)
|
||||
OD
|
||||
PrintE("</tr>")
|
||||
OD
|
||||
PrintE("</tbody>")
|
||||
PrintE("</table>")
|
||||
PrintE("</body>")
|
||||
PrintE("</html>")
|
||||
RETURN
|
||||
19
Task/Create-an-HTML-table/Ada/create-an-html-table-1.ada
Normal file
19
Task/Create-an-HTML-table/Ada/create-an-html-table-1.ada
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
with Ada.Strings.Unbounded;
|
||||
|
||||
generic
|
||||
type Item_Type is private;
|
||||
with function To_String(Item: Item_Type) return String is <>;
|
||||
with procedure Put(S: String) is <>;
|
||||
with procedure Put_Line(Line: String) is <>;
|
||||
package HTML_Table is
|
||||
|
||||
subtype U_String is Ada.Strings.Unbounded.Unbounded_String;
|
||||
function Convert(S: String) return U_String renames
|
||||
Ada.Strings.Unbounded.To_Unbounded_String;
|
||||
|
||||
type Item_Array is array(Positive range <>, Positive range <>) of Item_Type;
|
||||
type Header_Array is array(Positive range <>) of U_String;
|
||||
|
||||
procedure Print(Items: Item_Array; Column_Heads: Header_Array);
|
||||
|
||||
end HTML_Table;
|
||||
56
Task/Create-an-HTML-table/Ada/create-an-html-table-2.ada
Normal file
56
Task/Create-an-HTML-table/Ada/create-an-html-table-2.ada
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
package body HTML_Table is
|
||||
|
||||
procedure Print(Items: Item_Array; Column_Heads: Header_Array) is
|
||||
|
||||
function Blanks(N: Natural) return String is
|
||||
-- indention for better readable HTML
|
||||
begin
|
||||
if N=0 then
|
||||
return "";
|
||||
else
|
||||
return " " & Blanks(N-1);
|
||||
end if;
|
||||
end Blanks;
|
||||
|
||||
procedure Print_Row(Row_Number: Positive) is
|
||||
begin
|
||||
Put(Blanks(4) & "<tr><td>" & Positive'Image(Row_Number) & "</td>");
|
||||
for I in Items'Range(2) loop
|
||||
Put("<td>" & To_String(Items(Row_Number, I)) & "</td>");
|
||||
end loop;
|
||||
Put_Line("</tr>");
|
||||
end Print_Row;
|
||||
|
||||
procedure Print_Body is
|
||||
begin
|
||||
Put_Line(Blanks(2)&"<tbody align = ""right"">");
|
||||
for I in Items'Range(1) loop
|
||||
Print_Row(I);
|
||||
end loop;
|
||||
Put_Line(Blanks(2)&"</tbody>");
|
||||
end Print_Body;
|
||||
|
||||
procedure Print_Header is
|
||||
function To_Str(U: U_String) return String renames
|
||||
Ada.Strings.Unbounded.To_String;
|
||||
begin
|
||||
Put_Line(Blanks(2) & "<thead align = ""right"">");
|
||||
Put(Blanks(4) & "<tr><th></th>");
|
||||
for I in Column_Heads'Range loop
|
||||
Put("<td>" & To_Str(Column_Heads(I)) & "</td>");
|
||||
end loop;
|
||||
Put_Line("</tr>");
|
||||
Put_Line(Blanks(2) & "</thead>");
|
||||
end Print_Header;
|
||||
|
||||
begin
|
||||
if Items'Length(2) /= Column_Heads'Length then
|
||||
raise Constraint_Error with "number of headers /= number of columns";
|
||||
end if;
|
||||
Put_Line("<table>");
|
||||
Print_Header;
|
||||
Print_Body;
|
||||
Put_Line("</table>");
|
||||
end Print;
|
||||
|
||||
end HTML_Table;
|
||||
32
Task/Create-an-HTML-table/Ada/create-an-html-table-3.ada
Normal file
32
Task/Create-an-HTML-table/Ada/create-an-html-table-3.ada
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
with Ada.Text_IO, Ada.Numerics.Discrete_Random, HTML_Table;
|
||||
|
||||
procedure Test_HTML_Table is
|
||||
|
||||
-- define the Item_Type and the random generator
|
||||
type Four_Digits is mod 10_000;
|
||||
package Rand is new Ada.Numerics.Discrete_Random(Four_Digits);
|
||||
Gen: Rand.Generator;
|
||||
|
||||
-- now we instantiate the generic package HTML_Table
|
||||
package T is new HTML_Table
|
||||
(Item_Type => Four_Digits,
|
||||
To_String => Four_Digits'Image,
|
||||
Put => Ada.Text_IO.Put,
|
||||
Put_Line => Ada.Text_IO.Put_Line);
|
||||
|
||||
-- define the object that will the values that the table contains
|
||||
The_Table: T.Item_Array(1 .. 4, 1..3);
|
||||
|
||||
begin
|
||||
-- fill The_Table with random values
|
||||
Rand.Reset(Gen);
|
||||
for Rows in The_Table'Range(1) loop
|
||||
for Cols in The_Table'Range(2) loop
|
||||
The_Table(Rows, Cols) := Rand.Random(Gen);
|
||||
end loop;
|
||||
end loop;
|
||||
|
||||
-- output The_Table
|
||||
T.Print(Items => The_Table,
|
||||
Column_Heads => (T.Convert("X"), T.Convert("Y"), T.Convert("Z")));
|
||||
end Test_HTML_Table;
|
||||
11
Task/Create-an-HTML-table/Ada/create-an-html-table-4.ada
Normal file
11
Task/Create-an-HTML-table/Ada/create-an-html-table-4.ada
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<table>
|
||||
<thead align = "right">
|
||||
<tr><th></th><td>X</td><td>Y</td><td>Z</td></tr>
|
||||
</thead>
|
||||
<tbody align = "right">
|
||||
<tr><td> 1</td><td> 7255</td><td> 3014</td><td> 9436</td></tr>
|
||||
<tr><td> 2</td><td> 554</td><td> 3314</td><td> 8765</td></tr>
|
||||
<tr><td> 3</td><td> 4832</td><td> 129</td><td> 2048</td></tr>
|
||||
<tr><td> 4</td><td> 31</td><td> 6897</td><td> 8265</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
55
Task/Create-an-HTML-table/Agena/create-an-html-table.agena
Normal file
55
Task/Create-an-HTML-table/Agena/create-an-html-table.agena
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
notNumbered := 0; # possible values for html table row numbering
|
||||
numberedLeft := 1; # " " " " " " "
|
||||
numberedRight := 2; # " " " " " " "
|
||||
|
||||
alignCentre := 0; # possible values for html table column alignment
|
||||
alignLeft := 1; # " " " " " " "
|
||||
alignRight := 2; # " " " " " " "
|
||||
|
||||
# write an html table to a file
|
||||
writeHtmlTable := proc( fh, t :: table ) is
|
||||
local align := "align='";
|
||||
case t.columnAlignment
|
||||
of alignLeft then align := align & "left'"
|
||||
of alignRight then align := align & "right'"
|
||||
else align := align & "center'"
|
||||
esac;
|
||||
local put := proc( text :: string ) is io.write( fh, text & "\n" ) end;
|
||||
local thElement := proc( content :: string ) is put( "<th " & align & ">" & content & "</th>" ) end;
|
||||
local tdElement := proc( content ) is put( "<td " & align & ">" & content & "</td>" ) end;
|
||||
# table element
|
||||
put( "<table"
|
||||
& " cellspacing='" & t.cellSpacing & "'"
|
||||
& " colspacing='" & t.colSpacing & "'"
|
||||
& " border='" & t.border & "'"
|
||||
& ">"
|
||||
);
|
||||
# table headings
|
||||
put( "<tr>" );
|
||||
if t.rowNumbering = numberedLeft then thElement( "" ) fi;
|
||||
for col to size t.headings do thElement( t.headings[ col ] ) od;
|
||||
if t.rowNumbering = numberedRight then thElement( "" ) fi;
|
||||
put( "</tr>" );
|
||||
# table rows
|
||||
for row to size t.data do
|
||||
put( "<tr>" );
|
||||
if t.rowNumbering = numberedLeft then thElement( row & "" ) fi;
|
||||
for col to size t.data[ row ] do tdElement( t.data[ row, col ] ) od;
|
||||
if t.rowNumbering = numberedRight then thElement( row & "" ) fi;
|
||||
put( "</tr>" )
|
||||
od;
|
||||
# end of table
|
||||
put( "</table>" )
|
||||
end ;
|
||||
|
||||
# create an html table and print it to standard output
|
||||
scope
|
||||
local t := [];
|
||||
t.cellSpacing, t.colSpacing := 0, 0;
|
||||
t.border := 1;
|
||||
t.columnAlignment := alignRight;
|
||||
t.rowNumbering := numberedLeft;
|
||||
t.headings := [ "A", "B", "C" ];
|
||||
t.data := [ [ 1001, 1002, 1003 ], [ 21, 22, 23 ], [ 201, 202, 203 ] ];
|
||||
writeHtmlTable( io.stdout, t )
|
||||
epocs
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
0 NCOLS = 3:NROWS = 4
|
||||
1 PRINT "<HTML><HEAD></HEAD><BODY>"
|
||||
2 PRINT "<TABLE BORDER=1 CELLPADDING=0 CELLSPACING=0>"
|
||||
3 FOR ROW = 0 TO NROWS
|
||||
40 PRINT " <TR><TH>";
|
||||
50 IF ROW THEN PRINT ROW;
|
||||
60 PRINT "</TH>"
|
||||
70 FOR COL = 1 TO NCOLS
|
||||
800 PRINT MID$ (" ",1,(COL = 1 OR ROW) * 99) MID$ ("<TH>" + CHR$ (87 + COL) + "</TH>",1,(ROW = 0) * 99) MID$ ("<TD ALIGN=RIGHT>" + STR$ ( INT ( RND (1) * 10000)) + "</TD>",1,(ROW > 0) * 99);
|
||||
900 PRINT MID$ ("</TR>",1,(COLS = NCOLS) * 99) MID$ ( CHR$ (13),1,ROW OR COL = NCOLS);
|
||||
10000 NEXT COL,ROW: PRINT "</TABLE></BODY></HTML>";
|
||||
21
Task/Create-an-HTML-table/Arturo/create-an-html-table.arturo
Normal file
21
Task/Create-an-HTML-table/Arturo/create-an-html-table.arturo
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
table: function [content]
|
||||
-> join @["<table>" join @content "</table>"]
|
||||
|
||||
header: function [cells] -> join @["<tr>" join @cells "</tr>"]
|
||||
th: function [lbl] -> join @["<th>" lbl "</th>"]
|
||||
row: function [no]
|
||||
-> join @[
|
||||
"<tr><td style='font-weight:bold'>" no "</td>"
|
||||
"<td>" random 1000 9999 "</td>"
|
||||
"<td>" random 1000 9999 "</td>"
|
||||
"<td>" random 1000 9999 "</td></tr>"
|
||||
]
|
||||
|
||||
print table [
|
||||
header [th"" th"X" th"Y" th"Z"]
|
||||
row 1
|
||||
row 2
|
||||
row 3
|
||||
row 4
|
||||
row 5
|
||||
]
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
out = <table style="text-align:center; border: 1px solid"><th></th><th>X</th><th>Y</th><th>Z</th><tr>
|
||||
Loop 4
|
||||
out .= "`r`n<tr><th>" A_Index "</th><td>" Rand() "</td><td>" Rand() "</td><td>" Rand() "</tr>"
|
||||
out .= "`r`n</table>"
|
||||
MsgBox % clipboard := out
|
||||
|
||||
Rand(u=1000){
|
||||
Random, n, 1, % u
|
||||
return n
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
ncols% = 3
|
||||
nrows% = 4
|
||||
|
||||
*spool temp.htm
|
||||
|
||||
PRINT "<html><head></head><body>"
|
||||
PRINT "<table border=1 cellpadding=10 cellspacing=0>"
|
||||
|
||||
FOR row% = 0 TO nrows%
|
||||
IF row% = 0 THEN
|
||||
PRINT "<tr><th></th>" ;
|
||||
ELSE
|
||||
PRINT "<tr><th>" ; row% "</th>" ;
|
||||
ENDIF
|
||||
FOR col% = 1 TO ncols%
|
||||
IF row% = 0 THEN
|
||||
PRINT "<th>" CHR$(87 + col%) "</th>" ;
|
||||
ELSE
|
||||
PRINT "<td align=""right"">" ; RND(9999) "</td>" ;
|
||||
ENDIF
|
||||
NEXT col%
|
||||
PRINT "</tr>"
|
||||
NEXT row%
|
||||
|
||||
PRINT "</table>"
|
||||
PRINT "</body></html>"
|
||||
|
||||
*spool
|
||||
|
||||
SYS "ShellExecute", @hwnd%, 0, "temp.htm", 0, 0, 1
|
||||
3
Task/Create-an-HTML-table/BQN/create-an-html-table-1.bqn
Normal file
3
Task/Create-an-HTML-table/BQN/create-an-html-table-1.bqn
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
Tag ← {∾"<"‿𝕨‿">"‿𝕩‿"</"‿𝕨‿">"}
|
||||
|
||||
•Show "table" Tag ∾∾⟜(@+10)¨("tr"Tag∾)¨⟨"th"⊸Tag¨ ""<⊸∾⥊¨"XYZ"⟩∾("td" Tag •Fmt)¨¨ 0‿0‿1‿2 + 1‿3‿3‿3 × 4/⟨↕4⟩
|
||||
6
Task/Create-an-HTML-table/BQN/create-an-html-table-2.bqn
Normal file
6
Task/Create-an-HTML-table/BQN/create-an-html-table-2.bqn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
"<table><tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>0</td><td>1</td><td>2</td><td>3</td></tr>
|
||||
<tr><td>0</td><td>3</td><td>6</td><td>9</td></tr>
|
||||
<tr><td>1</td><td>4</td><td>7</td><td>10</td></tr>
|
||||
<tr><td>2</td><td>5</td><td>8</td><td>11</td></tr>
|
||||
</table>"
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: It's easier and neater to create the variables holding the random 4 digit numbers ahead of time
|
||||
for /l %%i in (1,1,12) do set /a rand%%i=!random! %% 9999
|
||||
|
||||
:: The command output of everything within the brackets is sent to the file "table.html", overwriting anything already in there
|
||||
(
|
||||
echo ^<html^>^<head^>^</head^>^<body^>
|
||||
echo ^<table border=1 cellpadding=10 cellspacing=0^>
|
||||
echo ^<tr^>^<th^>^</th^>
|
||||
echo ^<th^>X^</th^>
|
||||
echo ^<th^>Y^</th^>
|
||||
echo ^<th^>Z^</th^>
|
||||
echo ^</tr^>
|
||||
echo ^<tr^>^<th^>1^</th^>
|
||||
echo ^<td align="right"^>%rand1%^</td^>
|
||||
echo ^<td align="right"^>%rand2%^</td^>
|
||||
echo ^<td align="right"^>%rand3%^</td^>
|
||||
echo ^</tr^>
|
||||
echo ^<tr^>^<th^>2^</th^>
|
||||
echo ^<td align="right"^>%rand4%^</td^>
|
||||
echo ^<td align="right"^>%rand5%^</td^>
|
||||
echo ^<td align="right"^>%rand6%^</td^>
|
||||
echo ^</tr^>
|
||||
echo ^<tr^>^<th^>3^</th^>
|
||||
echo ^<td align="right"^>%rand7%^</td^>
|
||||
echo ^<td align="right"^>%rand8%^</td^>
|
||||
echo ^<td align="right"^>%rand9%^</td^>
|
||||
echo ^</tr^>
|
||||
echo ^<tr^>^<th^>4^</th^>
|
||||
echo ^<td align="right"^>%rand10%^</td^>
|
||||
echo ^<td align="right"^>%rand11%^</td^>
|
||||
echo ^<td align="right"^>%rand12%^</td^>
|
||||
echo ^</tr^>
|
||||
echo ^</table^>
|
||||
echo ^</body^>^</html^>
|
||||
) > table.html
|
||||
start table.html
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
( ( makeTable
|
||||
= headTexts
|
||||
minRowNr
|
||||
maxRowNr
|
||||
headCells
|
||||
cells
|
||||
rows
|
||||
Generator
|
||||
Table
|
||||
. !arg:(?headTexts.?minRowNr.?maxRowNr.?Generator)
|
||||
& ( headCells
|
||||
= cellText
|
||||
. !arg:%?cellText ?arg
|
||||
& (th.,!cellText) headCells$!arg
|
||||
|
|
||||
)
|
||||
& ( cells
|
||||
= cellText cellTexts numberGenerator
|
||||
. !arg
|
||||
: (%?cellText ?cellTexts.(=?numberGenerator))
|
||||
& (td.,numberGenerator$)
|
||||
cells$(!cellTexts.'$numberGenerator)
|
||||
|
|
||||
)
|
||||
& ( rows
|
||||
= headTexts rowNr maxRowNr Generator
|
||||
. !arg:(?headTexts.?rowNr.?maxRowNr.?Generator)
|
||||
& !rowNr:~>!maxRowNr
|
||||
& ( tr
|
||||
.
|
||||
, (td.,!rowNr)
|
||||
cells$(!headTexts.!Generator)
|
||||
)
|
||||
\n
|
||||
rows$(!headTexts.!rowNr+1.!maxRowNr.!Generator)
|
||||
|
|
||||
)
|
||||
& ( table
|
||||
.
|
||||
, ( thead
|
||||
. (align.right)
|
||||
, \n (tr.,(th.," ") headCells$!headTexts)
|
||||
)
|
||||
\n
|
||||
( tbody
|
||||
. (align.right)
|
||||
, \n
|
||||
rows
|
||||
$ (!headTexts.!minRowNr.!maxRowNr.!Generator)
|
||||
)
|
||||
)
|
||||
: ?Table
|
||||
& str$(toML$!Table) { Create HTML }
|
||||
)
|
||||
& makeTable
|
||||
$ ( X Y Z { Column headers }
|
||||
. 1 { Lowest row number }
|
||||
. 4 { Highest row number }
|
||||
. { Function that generates numbers 9, 10, ...}
|
||||
' ( cnt
|
||||
. (cnt=$(new$(==8))) { This creates an object 'cnt' with scope as a local function variable that survives between calls. }
|
||||
& !(cnt.)+1:?(cnt.)
|
||||
)
|
||||
)
|
||||
)
|
||||
68
Task/Create-an-HTML-table/C++/create-an-html-table-1.cpp
Normal file
68
Task/Create-an-HTML-table/C++/create-an-html-table-1.cpp
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include <fstream>
|
||||
#include <boost/array.hpp>
|
||||
#include <string>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <sstream>
|
||||
|
||||
void makeGap( int gap , std::string & text ) {
|
||||
for ( int i = 0 ; i < gap ; i++ )
|
||||
text.append( " " ) ;
|
||||
}
|
||||
|
||||
int main( ) {
|
||||
boost::array<char , 3> chars = { 'X' , 'Y' , 'Z' } ;
|
||||
int headgap = 3 ;
|
||||
int bodygap = 3 ;
|
||||
int tablegap = 6 ;
|
||||
int rowgap = 9 ;
|
||||
std::string tabletext( "<html>\n" ) ;
|
||||
makeGap( headgap , tabletext ) ;
|
||||
tabletext += "<head></head>\n" ;
|
||||
makeGap( bodygap , tabletext ) ;
|
||||
tabletext += "<body>\n" ;
|
||||
makeGap( tablegap , tabletext ) ;
|
||||
tabletext += "<table>\n" ;
|
||||
makeGap( tablegap + 1 , tabletext ) ;
|
||||
tabletext += "<thead align=\"right\">\n" ;
|
||||
makeGap( tablegap, tabletext ) ;
|
||||
tabletext += "<tr><th></th>" ;
|
||||
for ( int i = 0 ; i < 3 ; i++ ) {
|
||||
tabletext += "<td>" ;
|
||||
tabletext += *(chars.begin( ) + i ) ;
|
||||
tabletext += "</td>" ;
|
||||
}
|
||||
tabletext += "</tr>\n" ;
|
||||
makeGap( tablegap + 1 , tabletext ) ;
|
||||
tabletext += "</thead>" ;
|
||||
makeGap( tablegap + 1 , tabletext ) ;
|
||||
tabletext += "<tbody align=\"right\">\n" ;
|
||||
srand( time( 0 ) ) ;
|
||||
for ( int row = 0 ; row < 5 ; row++ ) {
|
||||
makeGap( rowgap , tabletext ) ;
|
||||
std::ostringstream oss ;
|
||||
tabletext += "<tr><td>" ;
|
||||
oss << row ;
|
||||
tabletext += oss.str( ) ;
|
||||
for ( int col = 0 ; col < 3 ; col++ ) {
|
||||
oss.str( "" ) ;
|
||||
int randnumber = rand( ) % 10000 ;
|
||||
oss << randnumber ;
|
||||
tabletext += "<td>" ;
|
||||
tabletext.append( oss.str( ) ) ;
|
||||
tabletext += "</td>" ;
|
||||
}
|
||||
tabletext += "</tr>\n" ;
|
||||
}
|
||||
makeGap( tablegap + 1 , tabletext ) ;
|
||||
tabletext += "</tbody>\n" ;
|
||||
makeGap( tablegap , tabletext ) ;
|
||||
tabletext += "</table>\n" ;
|
||||
makeGap( bodygap , tabletext ) ;
|
||||
tabletext += "</body>\n" ;
|
||||
tabletext += "</html>\n" ;
|
||||
std::ofstream htmltable( "testtable.html" , std::ios::out | std::ios::trunc ) ;
|
||||
htmltable << tabletext ;
|
||||
htmltable.close( ) ;
|
||||
return 0 ;
|
||||
}
|
||||
17
Task/Create-an-HTML-table/C++/create-an-html-table-2.cpp
Normal file
17
Task/Create-an-HTML-table/C++/create-an-html-table-2.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<table>
|
||||
<thead align="right">
|
||||
<tr><th></th><td>X</td><td>Y</td><td>Z</td></tr>
|
||||
</thead>
|
||||
<tbody align="right">
|
||||
<tr><td>0<td>1274</td><td>6847</td><td>352</td></tr>
|
||||
<tr><td>1<td>846</td><td>6577</td><td>4612</td></tr>
|
||||
<tr><td>2<td>7543</td><td>1644</td><td>8143</td></tr>
|
||||
<tr><td>3<td>4928</td><td>5714</td><td>8186</td></tr>
|
||||
<tr><td>4<td>3436</td><td>7493</td><td>9344</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
34
Task/Create-an-HTML-table/C-sharp/create-an-html-table-1.cs
Normal file
34
Task/Create-an-HTML-table/C-sharp/create-an-html-table-1.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace prog
|
||||
{
|
||||
class MainClass
|
||||
{
|
||||
public static void Main (string[] args)
|
||||
{
|
||||
StringBuilder s = new StringBuilder();
|
||||
Random rnd = new Random();
|
||||
|
||||
s.AppendLine("<table>");
|
||||
s.AppendLine("<thead align = \"right\">");
|
||||
s.Append("<tr><th></th>");
|
||||
for(int i=0; i<3; i++)
|
||||
s.Append("<td>" + "XYZ"[i] + "</td>");
|
||||
s.AppendLine("</tr>");
|
||||
s.AppendLine("</thead>");
|
||||
s.AppendLine("<tbody align = \"right\">");
|
||||
for( int i=0; i<3; i++ )
|
||||
{
|
||||
s.Append("<tr><td>"+i+"</td>");
|
||||
for( int j=0; j<3; j++ )
|
||||
s.Append("<td>"+rnd.Next(10000)+"</td>");
|
||||
s.AppendLine("</tr>");
|
||||
}
|
||||
s.AppendLine("</tbody>");
|
||||
s.AppendLine("</table>");
|
||||
|
||||
Console.WriteLine( s );
|
||||
}
|
||||
}
|
||||
}
|
||||
47
Task/Create-an-HTML-table/C-sharp/create-an-html-table-2.cs
Normal file
47
Task/Create-an-HTML-table/C-sharp/create-an-html-table-2.cs
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
|
||||
namespace N
|
||||
{
|
||||
public class T
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
var headers = new [] { "", "X", "Y", "Z" };
|
||||
|
||||
var cols = headers.Select(name =>
|
||||
new XElement(
|
||||
"th",
|
||||
name,
|
||||
new XAttribute("text-align", "center")
|
||||
)
|
||||
);
|
||||
|
||||
var rows = Enumerable.Range(0, 4).Select(ri =>
|
||||
new XElement(
|
||||
"tr",
|
||||
new XElement("td", ri),
|
||||
Enumerable.Range(0, 4).Select(ci =>
|
||||
new XElement(
|
||||
"td",
|
||||
ci,
|
||||
new XAttribute("text-align", "center")
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
var xml = new XElement(
|
||||
"table",
|
||||
new XElement(
|
||||
"thead",
|
||||
new XElement("tr", cols),
|
||||
new XElement("tbody", rows)
|
||||
)
|
||||
);
|
||||
|
||||
Console.WriteLine(xml.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Task/Create-an-HTML-table/C/create-an-html-table.c
Normal file
16
Task/Create-an-HTML-table/C/create-an-html-table.c
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
printf("<table style=\"text-align:center; border: 1px solid\"><th></th>"
|
||||
"<th>X</th><th>Y</th><th>Z</th>");
|
||||
for (i = 0; i < 4; i++) {
|
||||
printf("<tr><th>%d</th><td>%d</td><td>%d</td><td>%d</td></tr>", i,
|
||||
rand() % 10000, rand() % 10000, rand() % 10000);
|
||||
}
|
||||
printf("</table>");
|
||||
|
||||
return 0;
|
||||
}
|
||||
115
Task/Create-an-HTML-table/COBOL/create-an-html-table.cobol
Normal file
115
Task/Create-an-HTML-table/COBOL/create-an-html-table.cobol
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. Table.
|
||||
AUTHOR. Bill Gunshannon.
|
||||
INSTALLATION. Home.
|
||||
DATE-WRITTEN. 1 January 2022.
|
||||
************************************************************
|
||||
** Program Abstract:
|
||||
** Data values are hardcoded in this example but they
|
||||
** could come from anywhere. Computed, read from a
|
||||
** file, input from the keyboard.
|
||||
************************************************************
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT Table-File ASSIGN TO "index.html"
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
|
||||
FILE SECTION.
|
||||
|
||||
FD Table-File
|
||||
DATA RECORD IS Table-Record.
|
||||
01 Table-Record.
|
||||
05 Field1 PIC X(80).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
|
||||
01 Table-Data.
|
||||
05 Line3.
|
||||
10 Line3-Value1 PIC S9(4) VALUE 1234.
|
||||
10 Line3-Value2 PIC S9(4) VALUE 23.
|
||||
10 Line3-Value3 PIC S9(4) VALUE -123.
|
||||
05 Line4.
|
||||
10 Line4-Value1 PIC S9(4) VALUE 123.
|
||||
10 Line4-Value2 PIC S9(4) VALUE 12.
|
||||
10 Line4-Value3 PIC S9(4) VALUE -1234.
|
||||
05 Line5.
|
||||
10 Line5-Value1 PIC S9(4) VALUE 567.
|
||||
10 Line5-Value2 PIC S9(4) VALUE 6789.
|
||||
10 Line5-Value3 PIC S9(4) VALUE 3.
|
||||
|
||||
|
||||
01 Table-HTML.
|
||||
05 Line1 PIC X(16) VALUE
|
||||
"<table border=1>".
|
||||
05 Line2 PIC X(40) VALUE
|
||||
"<th></th><th>X</th><th>Y</th><th>Z</th>".
|
||||
05 Line3.
|
||||
10 Line3-Field1 PIC X(31) VALUE
|
||||
"<tr align=center><th>1</th><td>".
|
||||
10 Line3-Value1 PIC -ZZZ9.
|
||||
10 Line3-Field3 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line3-Value2 PIC -ZZZ9.
|
||||
10 Line3-Field5 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line3-Value3 PIC -ZZZ9.
|
||||
10 Line3-Field5 PIC X(10) VALUE
|
||||
"</td></tr>".
|
||||
05 Line4.
|
||||
10 Line4-Field1 PIC X(31) VALUE
|
||||
"<tr align=center><th>2</th><td>".
|
||||
10 Line4-Value1 PIC -ZZZ9.
|
||||
10 Line4-Field3 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line4-Value2 PIC -ZZZ9.
|
||||
10 Line4-Field5 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line4-Value3 PIC -ZZZ9.
|
||||
10 Line4-Field5 PIC X(10) VALUE
|
||||
"</td></tr>".
|
||||
05 Line5.
|
||||
10 Line5-Field1 PIC X(31) VALUE
|
||||
"<tr align=center><th>3</th><td>".
|
||||
10 Line5-Value1 PIC -ZZZ9.
|
||||
10 Line5-Field3 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line5-Value2 PIC -ZZZ9.
|
||||
10 Line5-Field5 PIC X(9) VALUE
|
||||
"</td><td>".
|
||||
10 Line5-Value3 PIC -ZZZ9.
|
||||
10 Line5-Field5 PIC X(10) VALUE
|
||||
"</td></tr>".
|
||||
05 Line6 PIC X(8) VALUE
|
||||
"</table>".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
|
||||
Main-Program.
|
||||
OPEN OUTPUT Table-File.
|
||||
MOVE CORRESPONDING Table-Data TO Table-HTML.
|
||||
PERFORM Write-Table.
|
||||
CLOSE Table-File.
|
||||
STOP RUN.
|
||||
|
||||
|
||||
Write-Table.
|
||||
WRITE Table-Record FROM Line1 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
WRITE Table-Record FROM Line2 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
WRITE Table-Record FROM Line3 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
WRITE Table-Record FROM Line4 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
WRITE Table-Record FROM Line5 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
WRITE Table-Record FROM Line6 OF Table-HTML
|
||||
AFTER ADVANCING 1 LINE.
|
||||
|
||||
|
||||
END-PROGRAM.
|
||||
11
Task/Create-an-HTML-table/Clojure/create-an-html-table.clj
Normal file
11
Task/Create-an-HTML-table/Clojure/create-an-html-table.clj
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
(ns rosettacode.html-table
|
||||
(:use 'hiccup.core))
|
||||
|
||||
(defn <tr> [el sq]
|
||||
[:tr (map vector (cycle [el]) sq)])
|
||||
|
||||
(html
|
||||
[:table
|
||||
(<tr> :th ["" \X \Y \Z])
|
||||
(for [n (range 1 4)]
|
||||
(->> #(rand-int 10000) (repeatedly 3) (cons n) (<tr> :td)))])
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# This is one of many ways to create a table. CoffeeScript plays nice
|
||||
# with any templating solution built for JavaScript, and of course you
|
||||
# can build tables in the browser using DOM APIs. This approach is just
|
||||
# brute force string manipulation.
|
||||
|
||||
table = (header_row, rows) ->
|
||||
"""
|
||||
<table>
|
||||
#{header_row}
|
||||
#{rows.join '\n'}
|
||||
</table>
|
||||
"""
|
||||
|
||||
tr = (cells) -> "<tr>#{cells.join ''}</tr>"
|
||||
th = (s) -> "<th align='right'>#{s}</th>"
|
||||
td = (s) -> "<td align='right'>#{s}</td>"
|
||||
rand_n = -> Math.floor Math.random() * 10000
|
||||
|
||||
header_cols = ['', 'X', 'Y', 'Z']
|
||||
header_row = tr (th s for s in header_cols)
|
||||
|
||||
rows = []
|
||||
for i in [1..5]
|
||||
rows.push tr [
|
||||
th(i)
|
||||
td rand_n()
|
||||
td rand_n()
|
||||
td rand_n()
|
||||
]
|
||||
|
||||
html = table header_row, rows
|
||||
console.log html
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
(ql:quickload :closure-html)
|
||||
(use-package :closure-html)
|
||||
(serialize-lhtml
|
||||
`(table nil
|
||||
(tr nil ,@(mapcar (lambda (x)
|
||||
(list 'th nil x))
|
||||
'("" "X" "Y" "Z")))
|
||||
,@(loop for i from 1 to 4
|
||||
collect `(tr nil
|
||||
(th nil ,(format nil "~a" i))
|
||||
,@(loop repeat 3 collect `(td nil ,(format nil "~a" (random 10000)))))))
|
||||
(make-string-sink))
|
||||
10
Task/Create-an-HTML-table/D/create-an-html-table.d
Normal file
10
Task/Create-an-HTML-table/D/create-an-html-table.d
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
void main() {
|
||||
import std.stdio, std.random;
|
||||
|
||||
writeln(`<table style="text-align:center; border: 1px solid">`);
|
||||
writeln("<th></th><th>X</th><th>Y</th><th>Z</th>");
|
||||
foreach (immutable i; 0 .. 4)
|
||||
writefln("<tr><th>%d</th><td>%d</td><td>%d</td><td>%d</td></tr>",
|
||||
i, uniform(0,1000), uniform(0,1000), uniform(0,1000));
|
||||
writeln("</table>");
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
program CreateHTMLTable;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses SysUtils;
|
||||
|
||||
function AddTableRow(aRowNo: Integer): string;
|
||||
begin
|
||||
Result := Format(' <tr><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr>',
|
||||
[aRowNo, Random(10000), Random(10000), Random(10000)]);
|
||||
end;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Randomize;
|
||||
Writeln('<table>');
|
||||
Writeln(' <tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>');
|
||||
for i := 1 to 4 do
|
||||
Writeln(AddTableRow(i));
|
||||
Writeln('</table>');
|
||||
Readln;
|
||||
end.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<table>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>1</td><td>7371</td><td>2659</td><td>1393</td></tr>
|
||||
<tr><td>2</td><td>6710</td><td>5025</td><td>5203</td></tr>
|
||||
<tr><td>3</td><td>1316</td><td>1599</td><td>2086</td></tr>
|
||||
<tr><td>4</td><td>4785</td><td>6612</td><td>5042</td></tr>
|
||||
</table>
|
||||
26
Task/Create-an-HTML-table/EchoLisp/create-an-html-table-1.l
Normal file
26
Task/Create-an-HTML-table/EchoLisp/create-an-html-table-1.l
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
;; styles -
|
||||
(style 'td "text-align:right")
|
||||
(style 'table "border-spacing: 10px;border:1px solid red")
|
||||
(style 'th "color:blue;")
|
||||
|
||||
;; generic html5 builder
|
||||
;; pushes <tag style=..> (proc content) </tag>
|
||||
(define (emit-tag tag html-proc content )
|
||||
(if (style tag)
|
||||
(push html (format "<%s style='%a'>" tag (style tag)))
|
||||
(push html (format "<%s>" tag )))
|
||||
(html-proc content)
|
||||
(push html (format "</%s> " tag )))
|
||||
|
||||
;; html procs : 1 tag, 1 proc
|
||||
(define (h-raw content)
|
||||
(push html (format "%s" content)))
|
||||
(define (h-header headers)
|
||||
(for ((h headers)) (emit-tag 'th h-raw h)))
|
||||
(define (h-row row)
|
||||
(for ((item row)) (emit-tag 'td h-raw item)))
|
||||
(define (h-table table )
|
||||
(emit-tag 'tr h-header (first table))
|
||||
;; add row-num i at head of row
|
||||
(for ((i 1000)(row (rest table))) (emit-tag 'tr h-row (cons i row))))
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
(define my-table '(("" X Y Z) (-1111 111 11) (22 -222 2222) (4422 0 42) (33 333 3333) (6666 666 66)))
|
||||
|
||||
(stack (define html 'html)) ;; stack of html elements
|
||||
(emit-tag 'table h-table my-table)
|
||||
(string-join (stack->list html) " ")
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Table do
|
||||
defp put_rows(n) do
|
||||
Enum.map_join(1..n, fn i ->
|
||||
"<tr align=right><th>#{i}</th>" <>
|
||||
Enum.map_join(1..3, fn _ ->
|
||||
"<td>#{:rand.uniform(2000)}</td>"
|
||||
end) <> "</tr>\n"
|
||||
end)
|
||||
end
|
||||
|
||||
def create_table(n\\3) do
|
||||
"<table border=1>\n" <>
|
||||
"<th></th><th>X</th><th>Y</th><th>Z</th>\n" <>
|
||||
put_rows(n) <>
|
||||
"</table>"
|
||||
end
|
||||
end
|
||||
|
||||
IO.puts Table.create_table
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<table border=1>
|
||||
<th></th><th>X</th><th>Y</th><th>Z</th>
|
||||
<tr align=right><th>1</th><td>1362</td><td>1289</td><td>357</td></tr>
|
||||
<tr align=right><th>2</th><td>1161</td><td>1345</td><td>1176</td></tr>
|
||||
<tr align=right><th>3</th><td>391</td><td>62</td><td>609</td></tr>
|
||||
</table>
|
||||
25
Task/Create-an-HTML-table/Erlang/create-an-html-table.erl
Normal file
25
Task/Create-an-HTML-table/Erlang/create-an-html-table.erl
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
-module( create_html_table ).
|
||||
|
||||
-export( [external_format/1, html_table/3, task/0] ).
|
||||
|
||||
external_format( XML ) -> remove_quoutes( lists:flatten(xmerl:export_simple_content([XML], xmerl_xml)) ).
|
||||
|
||||
html_table( Table_options, Headers, Contents ) ->
|
||||
Header = html_table_header( Headers ),
|
||||
Records = [html_table_record(X) || X <- Contents],
|
||||
{table, Table_options, [Header | Records]}.
|
||||
|
||||
task() ->
|
||||
Headers = [" ", "X", "Y", "Z"],
|
||||
Contents = [[erlang:integer_to_list(X), random(), random(), random()] || X <- lists:seq(1, 3)],
|
||||
external_format( html_table([{border, 1}, {cellpadding, 10}], Headers, Contents) ).
|
||||
|
||||
|
||||
|
||||
html_table_header( Items ) -> {tr, [], [{th, [], [X]} || X <- Items]}.
|
||||
|
||||
html_table_record( Items ) -> {tr, [], [{td, [], [X]} || X <- Items]}.
|
||||
|
||||
random() -> erlang:integer_to_list( random:uniform(1000) ).
|
||||
|
||||
remove_quoutes( String ) -> lists:flatten( string:tokens(String, "\"") ).
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
puts(1,"<table>\n")
|
||||
puts(1," <tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>\n")
|
||||
for i = 1 to 3 do
|
||||
printf(1," <tr><td>%d</td>",i)
|
||||
for j = 1 to 3 do
|
||||
printf(1,"<td>%d</td>",rand(10000))
|
||||
end for
|
||||
puts(1,"</tr>\n")
|
||||
end for
|
||||
puts(1,"</table>")
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<table>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>1</td><td>7978</td><td>7376</td><td>2382</td></tr>
|
||||
<tr><td>2</td><td>3632</td><td>1947</td><td>8900</td></tr>
|
||||
<tr><td>3</td><td>4098</td><td>1563</td><td>2762</td></tr>
|
||||
</table>
|
||||
44
Task/Create-an-HTML-table/F-Sharp/create-an-html-table.fs
Normal file
44
Task/Create-an-HTML-table/F-Sharp/create-an-html-table.fs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
open System.Xml
|
||||
|
||||
type XmlDocument with
|
||||
member this.Add element =
|
||||
this.AppendChild element
|
||||
member this.Element name =
|
||||
this.CreateElement(name) :> XmlNode
|
||||
member this.Element (name, (attr : (string * string) list)) =
|
||||
let node = this.CreateElement(name)
|
||||
for a in attr do
|
||||
node.SetAttribute (fst a, snd a)
|
||||
node
|
||||
member this.Element (name, (text : string)) =
|
||||
let node = this.CreateElement(name)
|
||||
node.AppendChild(this.Text text) |> ignore
|
||||
node
|
||||
member this.Text text =
|
||||
this.CreateTextNode(text)
|
||||
end
|
||||
|
||||
type XmlNode with
|
||||
member this.Add element =
|
||||
this.AppendChild element
|
||||
end
|
||||
|
||||
let head = [""; "X"; "Y"; "Z"]
|
||||
|
||||
let xd = new XmlDocument()
|
||||
let html = xd.Add (xd.Element("html"))
|
||||
html.Add(xd.Element("head"))
|
||||
.Add(xd.Element("title", "RosettaCode: Create_an_HTML_table"))
|
||||
let table = html.Add(xd.Element("body")).Add(xd.Element("table", [("style", "text-align:right")]))
|
||||
let tr1 = table.Add(xd.Element("tr"))
|
||||
for th in head do
|
||||
tr1.Add(xd.Element("th", th)) |> ignore
|
||||
for i in [1; 2; 3] do
|
||||
let tr = table.Add(xd.Element("tr"))
|
||||
tr.Add(xd.Element("th", i.ToString())) |> ignore
|
||||
for j in [1; 2; 3] do
|
||||
tr.Add(xd.Element("td", ((i-1)*3+j+1000).ToString())) |> ignore
|
||||
|
||||
let xw = new XmlTextWriter(System.Console.Out)
|
||||
xw.Formatting <- Formatting.Indented
|
||||
xd.WriteContentTo(xw)
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
USING: html.streams literals prettyprint random xml.writer ;
|
||||
|
||||
: rnd ( -- n ) 10,000 random ;
|
||||
|
||||
{
|
||||
{ "" "X" "Y" "Z" }
|
||||
${ 1 rnd rnd rnd }
|
||||
${ 2 rnd rnd rnd }
|
||||
${ 3 rnd rnd rnd }
|
||||
}
|
||||
[ simple-table. ] with-html-writer pprint-xml
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
<table style="display: inline-table; border-collapse: collapse;">
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
X
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Y
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Z
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
1
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
9463
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
3201
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
9044
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
2
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
3152
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
6685
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
928
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
3
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
696
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
3803
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<div style="display: inline-block; ">
|
||||
5079
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br/>
|
||||
65
Task/Create-an-HTML-table/Forth/create-an-html-table.fth
Normal file
65
Task/Create-an-HTML-table/Forth/create-an-html-table.fth
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
include random.hsf
|
||||
|
||||
\ parser routines
|
||||
: totag
|
||||
[char] < PARSE pad place \ parse input up to '<' char
|
||||
-1 >in +! \ move the interpreter pointer back 1 char
|
||||
pad count type ;
|
||||
|
||||
: '"' [char] " emit ;
|
||||
: '"..' '"' space ; \ output a quote char with trailing space
|
||||
|
||||
: toquote \ parse input to " then print as quoted text
|
||||
'"' [char] " PARSE pad place
|
||||
pad count type '"..' ;
|
||||
|
||||
: > [char] > emit space ; \ output the '>' with trailing space
|
||||
|
||||
\ Create some HTML extensions to the Forth interpreter
|
||||
: <table> ." <table>" cr ; : </table> ." </table>" cr ;
|
||||
: <table ." <table " ;
|
||||
: style=" ." style=" toquote ;
|
||||
: align=" ." align=" toquote ;
|
||||
: border=" ." border=" toquote ;
|
||||
: width=" ." width=" toquote ;
|
||||
: cellspacing=" ." cellspacing=" toquote ;
|
||||
: colspacing=" ." colspacing=" toquote ;
|
||||
|
||||
: <tr> ." <tr>" cr ; : </tr> ." </tr>" cr ;
|
||||
: <td> ." <td> " totag ; : </td> ." </td>" cr ;
|
||||
: <td ." <td " ;
|
||||
: <thead> ." <thead>" ; : </thead> ." </thead>" ;
|
||||
: <th> ." <th>" ; : </th> ." </th>" cr ;
|
||||
: <th ." <th " ;
|
||||
: <tbody ." <tbody " ; : </tbody> ." </tbody> " ;
|
||||
: <caption> cr ." <caption>" totag ; : </caption> ." </caption>" cr ;
|
||||
|
||||
\ Write the source code that generates HTML in our EXTENDED FORTH
|
||||
cr
|
||||
<table border=" 1" width=" 30%" >
|
||||
<caption> This table was created with FORTH HTML tags</caption>
|
||||
<tr>
|
||||
<th align=" right" > </th>
|
||||
<th align=" right" > ." A" </th>
|
||||
<th align=" right" > ." B" </th>
|
||||
<th align=" right" > ." C" </th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align=" right" > 1 . </th>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align=" right" > 2 . </th>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align=" right" > 3 . </th>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
<td align=" right" > 1000 RND . </td>
|
||||
</tr>
|
||||
</table>
|
||||
490
Task/Create-an-HTML-table/Fortran/create-an-html-table.f
Normal file
490
Task/Create-an-HTML-table/Fortran/create-an-html-table.f
Normal file
|
|
@ -0,0 +1,490 @@
|
|||
MODULE PARAMETERS !Assorted oddities that assorted routines pick and choose from.
|
||||
CHARACTER*5 I AM !Assuage finicky compilers.
|
||||
PARAMETER (IAM = "Gnash") !I AM!
|
||||
INTEGER LUSERCODE !One day, I'll get around to devising some string protocol.
|
||||
CHARACTER*28 USERCODE !I'm not too sure how long this can be.
|
||||
DATA USERCODE,LUSERCODE/"",0/!Especially before I have a text.
|
||||
END MODULE PARAMETERS
|
||||
|
||||
MODULE ASSISTANCE
|
||||
CONTAINS !Assorted routines that seem to be of general use but don't seem worth isolating..
|
||||
Subroutine Croak(Gasp) !A dying message, when horror is suddenly encountered.
|
||||
Casts out some final words and STOP, relying on the SubInOut stuff to have been used.
|
||||
Cut down from the full version of April MMI, that employed the SubIN and SubOUT protocol..
|
||||
Character*(*) Gasp !The last gasp.
|
||||
COMMON KBD,MSG
|
||||
WRITE (MSG,1) GASP
|
||||
1 FORMAT ("Oh dear! ",A)
|
||||
STOP "I STOP now. Farewell..." !Whatever pit I was in, I'm gone.
|
||||
End Subroutine Croak !That's it.
|
||||
|
||||
INTEGER FUNCTION LSTNB(TEXT) !Sigh. Last Not Blank.
|
||||
Concocted yet again by R.N.McLean (whom God preserve) December MM.
|
||||
Code checking reveals that the Compaq compiler generates a copy of the string and then finds the length of that when using the latter-day intrinsic LEN_TRIM. Madness!
|
||||
Can't DO WHILE (L.GT.0 .AND. TEXT(L:L).LE.' ') !Control chars. regarded as spaces.
|
||||
Curse the morons who think it good that the compiler MIGHT evaluate logical expressions fully.
|
||||
Crude GO TO rather than a DO-loop, because compilers use a loop counter as well as updating the index variable.
|
||||
Comparison runs of GNASH showed a saving of ~3% in its mass-data reading through the avoidance of DO in LSTNB alone.
|
||||
Crappy code for character comparison of varying lengths is avoided by using ICHAR which is for single characters only.
|
||||
Checking the indexing of CHARACTER variables for bounds evoked astounding stupidities, such as calculating the length of TEXT(L:L) by subtracting L from L!
|
||||
Comparison runs of GNASH showed a saving of ~25-30% in its mass data scanning for this, involving all its two-dozen or so single-character comparisons, not just in LSTNB.
|
||||
CHARACTER*(*),INTENT(IN):: TEXT !The bumf. If there must be copy-in, at least there need not be copy back.
|
||||
INTEGER L !The length of the bumf.
|
||||
L = LEN(TEXT) !So, what is it?
|
||||
1 IF (L.LE.0) GO TO 2 !Are we there yet?
|
||||
IF (ICHAR(TEXT(L:L)).GT.ICHAR(" ")) GO TO 2 !Control chars are regarded as spaces also.
|
||||
L = L - 1 !Step back one.
|
||||
GO TO 1 !And try again.
|
||||
2 LSTNB = L !The last non-blank, possibly zero.
|
||||
RETURN !Unsafe to use LSTNB as a variable.
|
||||
END FUNCTION LSTNB !Compilers can bungle it.
|
||||
CHARACTER*2 FUNCTION I2FMT(N) !These are all the same.
|
||||
INTEGER*4 N !But, the compiler doesn't offer generalisations.
|
||||
IF (N.LT.0) THEN !Negative numbers cop a sign.
|
||||
IF (N.LT.-9) THEN !But there's not much room left.
|
||||
I2FMT = "-!" !So this means 'overflow'.
|
||||
ELSE !Otherwise, room for one negative digit.
|
||||
I2FMT = "-"//CHAR(ICHAR("0") - N) !Thus. Presume adjacent character codes, etc.
|
||||
END IF !So much for negative numbers.
|
||||
ELSE IF (N.LT.10) THEN !Single digit positive?
|
||||
I2FMT = " " //CHAR(ICHAR("0") + N) !Yes. This.
|
||||
ELSE IF (N.LT.100) THEN !Two digit positive?
|
||||
I2FMT = CHAR(N/10 + ICHAR("0")) !Yes.
|
||||
1 //CHAR(MOD(N,10) + ICHAR("0")) !These.
|
||||
ELSE !Otherwise,
|
||||
I2FMT = "+!" !Positive overflow.
|
||||
END IF !So much for that.
|
||||
END FUNCTION I2FMT !No WRITE and FORMAT unlimbering.
|
||||
CHARACTER*8 FUNCTION I8FMT(N) !Oh for proper strings.
|
||||
INTEGER*4 N
|
||||
CHARACTER*8 HIC
|
||||
WRITE (HIC,1) N
|
||||
1 FORMAT (I8)
|
||||
I8FMT = HIC
|
||||
END FUNCTION I8FMT
|
||||
CHARACTER*42 FUNCTION ERRORWORDS(IT) !Look for an explanation. One day, the system may offer coherent messages.
|
||||
Curious collection of encountered codes. Will they differ on other systems?
|
||||
Compaq's compiler was taken over by unintel; http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/bldaps_for/common/bldaps_rterrs.htm
|
||||
contains a schedule of error numbers that matched those I'd found for Compaq, and so some assumptions are added.
|
||||
Copying all (hundreds!) is excessive; these seem possible for the usage so far made of error diversion.
|
||||
Compaq's compiler interface ("visual" blah) has a help offering, which can provide error code information.
|
||||
Compaq messages also appear in http://cens.ioc.ee/local/man/CompaqCompilers/cf/dfuum028.htm#tab_runtime_errors
|
||||
Combines IOSTAT codes (file open, read etc) with STAT codes (allocate/deallocate) as their numbers are distinct.
|
||||
Completeness and context remains a problem. Excess brevity means cause and effect can be confused.
|
||||
INTEGER IT !The error code in question.
|
||||
INTEGER LASTKNOWN !Some codes I know about.
|
||||
PARAMETER (LASTKNOWN = 26) !But only a few, discovered by experiment and mishap.
|
||||
TYPE HINT !For them, I can supply a table.
|
||||
INTEGER CODE !The code number. (But, different systems..??)
|
||||
CHARACTER*42 EXPLICATION !An explanation. Will it be the answer?
|
||||
END TYPE HINT !Simple enough.
|
||||
TYPE(HINT) ERROR(LASTKNOWN) !So, let's have a collection.
|
||||
PARAMETER (ERROR = (/ !With these values.
|
||||
1 HINT(-1,"End-of-file at the start of reading!"), !From examples supplied with the Compaq compiler involving IOSTAT.
|
||||
2 HINT( 0,"No worries."), !Apparently the only standard value.
|
||||
3 HINT( 9,"Permissions - read only?"),
|
||||
4 HINT(10,"File already exists!"),
|
||||
5 HINT(17,"Syntax error in NameList input."),
|
||||
6 HINT(18,"Too many values for the recipient."),
|
||||
7 HINT(19,"Invalid naming of a variable."),
|
||||
8 HINT(24,"Surprise end-of-file during read!"), !From example source.
|
||||
9 HINT(25,"Invalid record number!"),
|
||||
o HINT(29,"File name not found."),
|
||||
1 HINT(30,"Unavailable - exclusive use?"),
|
||||
2 HINT(32,"Invalid fileunit number!"),
|
||||
3 HINT(35,"'Binary' form usage is rejected."), !From example source.
|
||||
4 HINT(36,"Record number for a non-existing record!"),
|
||||
5 HINT(37,"No record length has been specified."),
|
||||
6 HINT(38,"I/O error during a write!"),
|
||||
7 HINT(39,"I/O error during a read!"),
|
||||
8 HINT(41,"Insufficient memory available!"),
|
||||
9 HINT(43,"Malformed file name."),
|
||||
o HINT(47,"Attempting a write, but read-only is set."),
|
||||
1 HINT(66,"Output overflows single record size."), !This one from experience.
|
||||
2 HINT(67,"Input demand exceeds single record size."), !These two are for unformatted I/O.
|
||||
3 HINT(151,"Can't allocate: already allocated!"), !These different numbers are for memory allocation failures.
|
||||
4 HINT(153,"Can't deallocate: not allocated!"),
|
||||
5 HINT(173,"The fingered item was not allocated!"), !Such as an ordinary array that was not allocated.
|
||||
6 HINT(179,"Size exceeds addressable memory!")/))
|
||||
INTEGER I !A stepper.
|
||||
DO I = LASTKNOWN,1,-1 !So, step through the known codes.
|
||||
IF (IT .EQ. ERROR(I).CODE) GO TO 1 !This one?
|
||||
END DO !On to the next.
|
||||
1 IF (I.LE.0) THEN !Fail with I = 0.
|
||||
ERRORWORDS = I8FMT(IT)//" is a novel code!" !Reveal the mysterious number.
|
||||
ELSE !But otherwise, it is found.
|
||||
ERRORWORDS = ERROR(I).EXPLICATION !And these words might even apply.
|
||||
END IF !But on all systems?
|
||||
END FUNCTION ERRORWORDS !Hopefully, helpful.
|
||||
END MODULE ASSISTANCE
|
||||
|
||||
MODULE LOGORRHOEA
|
||||
CONTAINS
|
||||
SUBROUTINE ECART(TEXT) !Produces trace output with many auxiliary details.
|
||||
CHARACTER*(*) TEXT !The text to be annotated.
|
||||
COMMON KBD,MSG !I/O units.
|
||||
WRITE (MSG,1) TEXT !Just roll the text.
|
||||
1 FORMAT ("Trace: ",A) !Lacks the names of the invoking routine, and that which invoked it.
|
||||
END SUBROUTINE ECART
|
||||
SUBROUTINE WRITE(OUT,TEXT,ON) !We get here in the end. Cast forth some pearls.
|
||||
C Once upon a time, there was just confusion between ASCII and EBCDIC character codes and glyphs,
|
||||
c after many variant collections caused annoyance. Now I see that modern computing has introduced
|
||||
c many new variations, so that one text editor may display glyphs differing from those displayed
|
||||
c by another editor and also different from those displayed when a programme writes to the screen
|
||||
c in "teletype" mode, which is to say, employing the character/glyph combination of the moment.
|
||||
c And in particular, decimal points and degree symbols differ and annoyance has grown.
|
||||
c So, on re-arranging SAY to not send output to multiple distinations depending on the value of OUT,
|
||||
c except for the special output to MSG that is echoed to TRAIL, it became less messy to make an assault
|
||||
c on the text that goes to MSG, but after it was sent to TRAIL. I would have preferred to fiddle the
|
||||
c "code page" for text output that determines what glyph to show for which code, but not only
|
||||
c is it unclear how to do this, even if facilities were available, I suspect that the screen display
|
||||
c software only loads the mysterious code page during startup.
|
||||
c This fiddling means that any write to MSG should be done last, and writes of text literals
|
||||
c should not include characters that will be fiddled, as text literals may be protected against change.
|
||||
C Somewhere along the way, the cent character (¢) has disappeared. Perhaps it will return in "unicode".
|
||||
USE ASSISTANCE !But might still have difficulty.
|
||||
INTEGER OUT !The destination.
|
||||
CHARACTER*(*) TEXT !The message. Possibly damaged. Any trailing spaces will be sent forth.
|
||||
LOGICAL ON !Whether to terminate the line... TRUE sez that someone will be carrying on.
|
||||
INTEGER IOSTAT !Furrytran gibberish.
|
||||
c INCLUDE "cIOUnits.for" !I/O unit numbers.
|
||||
COMMON KBD,MSG
|
||||
c INTEGER*2,SAVE:: I Be !Self-identification.
|
||||
c CALL SUBIN("Write",I Be) !Hullo!
|
||||
IF (OUT.LE.0) GO TO 999 !Goodbye?
|
||||
c IF (IOGOOD(OUT)) THEN !Is this one in good heart?
|
||||
c IF (IOCOUNT(OUT).LE.0 .AND. OUT.NE.MSG) THEN !Is it attached to a file?
|
||||
c IF (IONAME(OUT).EQ."") IONAME(OUT) = "Anome" !"No name".
|
||||
c 1 //I2FMT(OUT)//".txt" !Clutch at straws.
|
||||
c IF (.NOT.OPEN(OUT,IONAME(OUT),"REPLACE","WRITE")) THEN !Just in time?
|
||||
c IOGOOD(OUT) = .FALSE. !No! Strangle further usage.
|
||||
c GO TO 999 !Can't write, so give up!
|
||||
c END IF !It might be better to hit the WRITE and fail.
|
||||
c END IF !We should be ready now.
|
||||
c IF (OUT.EQ.MSG .AND. SCRAGTEXTOUT) CALL SCRAG(TEXT) !Output to the screen is recoded for the screen.
|
||||
IF (ON) THEN !Now for the actual output at last. This is annoying.
|
||||
WRITE (OUT,1,ERR = 666,IOSTAT = IOSTAT) TEXT !Splurt.
|
||||
1 FORMAT (A,$) !Don't move on to a new line. (The "$"! Is it not obvious?)
|
||||
c IOPART(OUT) = IOPART(OUT) + 1 !Thus count a part-line in case someone fusses.
|
||||
ELSE !But mostly, write and advance.
|
||||
WRITE (OUT,2,ERR = 666,IOSTAT = IOSTAT) TEXT !Splurt.
|
||||
2 FORMAT (A) !*-style "free" format chops at 80 or some such.
|
||||
END IF !So much for last-moment dithering.
|
||||
c IOCOUNT(OUT) = IOCOUNT(OUT) + 1 !Count another write (whole or part) so as to be not zero..
|
||||
c END IF !So much for active passages.
|
||||
c 999 CALL SUBOUT("Write") !I am closing.
|
||||
999 RETURN !Done.
|
||||
Confusions.
|
||||
666 IF (OUT.NE.MSG) CALL CROAK("Can't write to unit "//I2FMT(OUT) !Why not?
|
||||
c 1 //" (file "//IONAME(OUT)(1:LSTNB(IONAME(OUT))) !Possibly, no more disc space! In which case, this may fail also!
|
||||
2 //") message "//ERRORWORDS(IOSTAT) !Hopefully, helpful.
|
||||
3 //" length "//I8FMT(LEN(TEXT))//", this: "//TEXT) !The instigation.
|
||||
STOP "Constipation!" !Just so.
|
||||
END SUBROUTINE WRITE !The moving hand having writ, moves on.
|
||||
|
||||
SUBROUTINE SAY(OUT,TEXT) !And maybe a copy to the trail file as well.
|
||||
USE PARAMETERS !Odds and ends.
|
||||
USE ASSISTANCE !Just a little.
|
||||
INTEGER OUT !The orifice.
|
||||
CHARACTER*(*) TEXT !The blather. Can be modified if to MSG and certain characters are found.
|
||||
CHARACTER*120 IS !For a snatched question.
|
||||
INTEGER L !A finger.
|
||||
c INCLUDE "cIOUnits.for" !I/O unit numbers.
|
||||
COMMON KBD,MSG
|
||||
c INTEGER*2,SAVE:: I Be !Self-identification.
|
||||
c CALL SUBIN("Say",I Be) !Me do be Me, I say!
|
||||
Chop off trailing spaces.
|
||||
L = LEN(TEXT) !What I say may be rather brief.
|
||||
1 IF (L.GT.0) THEN !So, is there a last character to look at?
|
||||
IF (ICHAR(TEXT(L:L)).LE.ICHAR(" ")) THEN !Yes. Is it boring?
|
||||
L = L - 1 !Yes! Trim it!
|
||||
GO TO 1 !And check afresh.
|
||||
END IF !A DO-loop has overhead with its iteration count as well.
|
||||
END IF !Function LEN_TRIM copies the text first!!
|
||||
Contemplate the disposition of TEXT(1:L)
|
||||
c IF (OUT.NE.MSG) THEN !Normal stuff?
|
||||
CALL WRITE(OUT,TEXT(1:L),.FALSE.) !Roll.
|
||||
c ELSE !Echo what goes to MSG to the TRAIL file.
|
||||
c CALL WRITE(TRAIL,TEXT(1:L),.FALSE.) !Thus.
|
||||
c CALL WRITE( MSG,TEXT(1:L),.FALSE.) !Splot to the screen.
|
||||
c IF (.NOT.BLABBERMOUTH) THEN !Do we know restraint?
|
||||
c IF (IOCOUNT(MSG).GT.BURP) THEN !Yes. Consider it.
|
||||
c WRITE (MSG,100) IOCOUNT(MSG) !Alas, triggered. So remark on quantity,
|
||||
c 100 FORMAT (//I9," lines! Your spirit might flag." !Hint. (Not copied to the TRAIL file)
|
||||
c 1 /," Type quit to set GIVEOVER to TRUE, with hope for "
|
||||
c 2 ,"a speedy palliation,",
|
||||
c 3 /," or QUIT to abandon everything, here, now",
|
||||
c 4 /," or blabber to abandon further restraint,",
|
||||
c 5 /," or anything else to carry on:")
|
||||
c IS = REPLY("QUIT, quit, blabber or continue") !And ask.
|
||||
c IF (IS.EQ."QUIT") CALL CROAK("Enough of this!") !No UPDATE, nothing.
|
||||
c CALL UPCASE(IS) !Now we're past the nice distinction, simplify.
|
||||
c IF (IS.EQ."QUIT") GIVEOVER = .TRUE. !Signal to those who listen.
|
||||
c IF (IS.EQ."BLABBER") BLABBERMOUTH = .TRUE. !Well?
|
||||
c IF (GIVEOVER) WRITE (MSG,101) !Announce hope.
|
||||
c 101 FORMAT ("Let's hope that the babbler notices...") !Like, IF (GIVEOVER) GO TO ...
|
||||
c IF (.NOT.GIVEOVER) WRITE (MSG,102) !Alternatively, firm resolve.
|
||||
c 102 FORMAT("Onwards with renewed vigour!") !Fight the good fight.
|
||||
c BURP = IOCOUNT(MSG) + ENOUGH !The next pause to come.
|
||||
c END IF !So much for last-moment restraint.
|
||||
c END IF !So much for restraint.
|
||||
c END IF !So much for selection.
|
||||
c CALL SUBOUT("Say") !I am merely the messenger.
|
||||
END SUBROUTINE SAY !Enough said.
|
||||
SUBROUTINE SAYON(OUT,TEXT) !Roll to the screen and to the trail file as well.
|
||||
C This differs by not ending the line so that further output can be appended to it.
|
||||
USE ASSISTANCE
|
||||
INTEGER OUT !The orifice.
|
||||
CHARACTER*(*) TEXT !The blather.
|
||||
INTEGER L !A finger.
|
||||
c INCLUDE "cIOUnits.for" !I/O unit numbers.
|
||||
COMMON KBD,MSG
|
||||
c INTEGER*2,SAVE:: I Be !Self-identification.
|
||||
c CALL SUBIN("SayOn",I Be) !Me do be another. Me, I say on!
|
||||
L = LEN(TEXT) !How much say I on?
|
||||
1 IF (L.GT.0) THEN !I say on anything?
|
||||
IF (ICHAR(TEXT(L:L)).LE.ICHAR(" ")) THEN !I end it spaceish?
|
||||
L = L - 1 !Yes. Trim such.
|
||||
GO TO 1 !And look afresh.
|
||||
END IF !So much for trailing off.
|
||||
END IF !Continue with L fingering the last non-blank.
|
||||
c IF (OUT.EQ.MSG) CALL WRITE(TRAIL,TEXT(1:L),.TRUE.) !Writes to the screen go also to the TRAIL.
|
||||
CALL WRITE( OUT,TEXT(1:L),.TRUE.) !It is said, and more is expected.
|
||||
c CALL SUBOUT("SayOn") !I am merely the messenger.
|
||||
END SUBROUTINE SAYON !And further messages impend.
|
||||
|
||||
END MODULE LOGORRHOEA
|
||||
|
||||
MODULE HTMLSTUFF !Assists with the production of decorated output.
|
||||
Can't say I think much of the scheme. How about <+blah> ... <-blah> rather than the assymetric <blah> ... </blah>?
|
||||
Cack-handed comment format as well...
|
||||
USE PARAMETERS !To ascertain who I AM.
|
||||
USE ASSISTANCE !To get at LSTNB.
|
||||
USE LOGORRHOEA !To get at SAYON and SAY.
|
||||
INTEGER INDEEP,HOLE !I keep track of some details.
|
||||
PRIVATE INDEEP,HOLE !Amongst myselves.
|
||||
DATA INDEEP,HOLE/0,0/ !Initially, I'm not doing anything.
|
||||
Choose amongst output formats.
|
||||
INTEGER LASTFILETYPENAME !Certain file types are recognised.
|
||||
PARAMETER (LASTFILETYPENAME = 2) !Thus, three options.
|
||||
INTEGER OUTTYPE,OUTTXT,OUTCSV,OUTHTML !The recognition.
|
||||
CHARACTER*5 OUTSTYLE,FILETYPENAME(0:LASTFILETYPENAME) !Via the tail end of a file name.
|
||||
PARAMETER (FILETYPENAME = (/".txt",".CSV",".HTML"/)) !Thusly. Note that WHATFILETYPE will not recognise ".txt" directly.
|
||||
PARAMETER (OUTTXT = 0,OUTCSV = 1,OUTHTML = 2) !Mnemonics.
|
||||
DATA OUTSTYLE/""/ !So OUTTYPE = OUTTXT. But if an output file is specified, its file type will be inspected.
|
||||
TYPE HTMLMNEMONIC !I might as well get systematic, as these are global names.
|
||||
CHARACTER* 9 COMMAH !This looks like a comma
|
||||
CHARACTER* 9 COMMAD !And in another context, so does this.
|
||||
CHARACTER* 6 SPACE !Some spaces are to be atomic.
|
||||
CHARACTER*18 RED !Decoration and
|
||||
CHARACTER* 7 DER !noitaroceD.
|
||||
END TYPE HTMLMNEMONIC !That's enough for now.
|
||||
TYPE(HTMLMNEMONIC) HTMLA !I'll have one set, please.
|
||||
PARAMETER (HTMLA = HTMLMNEMONIC( !With these values.
|
||||
1 "</th><th>", !But .html has its variants. For a heading.
|
||||
2 "</td><td>", !For a table datum.
|
||||
3 " ", !A space that is not to be split.
|
||||
4 '<font color="red">', !Dabble in decoration.
|
||||
5 '</font>')) !Grrrr. A font is for baptismal water.
|
||||
CONTAINS !Mysterious assistants.
|
||||
SUBROUTINE HTML(TEXT) !Rolls some text, with suitable indentation.
|
||||
CHARACTER*(*) TEXT !The text.
|
||||
c INCLUDE "cIOUnits.for" !I/O unit numbers.
|
||||
IF (LEN(TEXT).LE.0) RETURN !Possibly boring.
|
||||
IF (INDEEP.GT.0) THEN !Some indenting desired?
|
||||
CALL WRITE(HOLE,REPEAT(" ",INDEEP),.TRUE.) !Yep. SAYON trims trailing spaces.
|
||||
c IF (HOLE.EQ.MSG) CALL WRITE(TRAIL,REPEAT(" ",INDEEP),.TRUE.) !So I must copy.
|
||||
END IF !Enough indenting.
|
||||
CALL SAY(HOLE,TEXT) !Say the piece and end the line.
|
||||
END SUBROUTINE HTML !Maintain stacks? Check entry/exit matching?
|
||||
|
||||
SUBROUTINE HTML3(HEAD,BUMF,TAIL) !Rolls some text, with suitable indentation.
|
||||
Checks the BUMF for decimal points only. HTMLALINE handles text to HTML for troublesome characters, replacing them with special names for the desired glyph.
|
||||
Confusion might arise, if & is in BUMF and is not to be converted. "&" vs "&so on"; similar worries with < and >.
|
||||
CHARACTER*(*) HEAD !If not "", the start of the line, with indentation supplied.
|
||||
CHARACTER*(*) BUMF !The main body of the text.
|
||||
CHARACTER*(*) TAIL !If not "", this is for the end of the line.
|
||||
INTEGER LB,L1,L2 !A length and some fingers for scanning.
|
||||
CHARACTER*1 MUMBLE !These symbols may not be presented properly.
|
||||
CHARACTER*8 MUTTER !But these encodements may be interpreted as desired.
|
||||
PARAMETER (MUMBLE = "·") !I want certain glyphs, but encodement varies.
|
||||
PARAMETER (MUTTER = "·") !As does recognition.
|
||||
c INCLUDE "cIOUnits.for" !I/O unit numbers.
|
||||
COMMON KBD,MSG
|
||||
Commence with a new line?
|
||||
IF (HEAD.NE."") THEN !Is a line to be started? (Spaces are equivalent to "" as well)
|
||||
IF (INDEEP.GT.0) THEN !Some indentation is good.
|
||||
CALL WRITE(HOLE,REPEAT(" ",INDEEP),.TRUE.) !Yep. SAYON trims trailing spaces.
|
||||
c IF (HOLE.EQ.MSG) CALL WRITE(TRAIL, !So I must copy for the log.
|
||||
c 1 REPEAT(" ",INDEEP),.TRUE.) !Hopefully, not generated a second time.
|
||||
ELSE !The accountancy may be bungled.
|
||||
CALL ECART("HTML huh? InDeep="//I8FMT(INDEEP)) !So, complain.
|
||||
END IF !Also, REPEAT has misbehaved.
|
||||
CALL SAYON(HOLE,HEAD) !Thus a suitable indentation.
|
||||
END IF !So much for a starter.
|
||||
Cast forth the bumf. Any trailing spaces will be dropped by SAYON.
|
||||
LB = LEN(BUMF) !How much bumf? Trailing spaces will be rolled.
|
||||
L1 = 1 !Waiting to be sent.
|
||||
L2 = 0 !Syncopation.
|
||||
1 L2 = L2 + 1 !Advance to the next character to be inspected..
|
||||
IF (L2.GT.LB) GO TO 2 !Is there another?
|
||||
IF (ICHAR(BUMF(L2:L2)).NE.ICHAR(MUMBLE)) GO TO 1 !Yes. Advance through the untroublesome.
|
||||
IF (L1.LT.L2) THEN !A hit. Have any untroubled ones been passed?
|
||||
CALL WRITE(HOLE,BUMF(L1:L2 - 1),.TRUE.) !Yes. Send them forth.
|
||||
c IF (HOLE.EQ.MSG) CALL WRITE(TRAIL,BUMF(L1:L2 - 1),.TRUE.) !With any trailing spaces included.
|
||||
END IF !Now to do something in place of BUMF(L2)
|
||||
L1 = L2 + 1 !Moving the marker past it, like.
|
||||
CALL SAYON(HOLE,MUTTER) !The replacement for BUMF(L2 as was).
|
||||
GO TO 1 !Continue scanning.
|
||||
2 IF (L2.GT.L1) THEN !Any tail end, but not ending the output line.
|
||||
CALL WRITE(HOLE,BUMF(L1:L2 - 1),.TRUE.) !Yes. Away it goes.
|
||||
c IF (HOLE.EQ.MSG) CALL WRITE(TRAIL,BUMF(L1:L2 - 1),.TRUE.) !And logged.
|
||||
END IF !So much for the bumf.
|
||||
Consider ending the line.
|
||||
3 IF (TAIL.NE."") CALL SAY(HOLE,TAIL) !Enough!
|
||||
END SUBROUTINE HTML3 !Maintain stacks? Check entry/exit matching?
|
||||
|
||||
SUBROUTINE HTMLSTART(OUT,TITLE,DESC) !Roll forth some gibberish.
|
||||
INTEGER OUT !The mouthpiece, mentioned once only at the start, and remembered for future use.
|
||||
CHARACTER*(*) TITLE !This should be brief.
|
||||
CHARACTER*(*) DESC !This a little less brief.
|
||||
CHARACTER*(*) METAH !Some repetition.
|
||||
PARAMETER (METAH = '<Meta Name="') !The syntax is dubious.
|
||||
CHARACTER*8 D !YYYYMMDD
|
||||
CHARACTER*10 T !HHMMSS.FFF
|
||||
HOLE = OUT !Keep a local copy to save on parameters.
|
||||
INDEEP = 0 !We start.
|
||||
CALL HTML('<!DOCTYPE HTML PUBLIC "' !Before we begin, we wave hands.
|
||||
1 //'-//W3C//DTD HTML 4.01 Transitional//EN"' !Otherwise "nowrap" is objected to, as in http://validator.w3.org/check
|
||||
2 //' "http://www.w3.org/TR/html4/loose.dtd">') !Endless blather.
|
||||
CALL HTML('<HTML lang="en-NZ">') ! H E R E W E G O !
|
||||
INDEEP = 1 !Its content.
|
||||
CALL HTML("<Head>") !And the first decoration begins.
|
||||
INDEEP = 2 !Its content.
|
||||
CALL HTML("<Title>"//I AM//" " !This appears in the web page tag.
|
||||
1 // TITLE(1:LSTNB(TITLE)) //"</Title>")!So it should be short.
|
||||
CALL HTML('<Meta http-equiv="Content-Type"' !Crazed gibberish.
|
||||
1 //' content="text/html; charset=utf-8">') !But said to be worthy.
|
||||
CALL HTML(METAH//'Description" Content="'//DESC//'">') !Hopefully, helpful.
|
||||
CALL HTML(METAH//'Generator" Content="'//I AM//'">') !I said.
|
||||
CALL DATE_AND_TIME(DATE = D,TIME = T) !Not assignments, but attachments.
|
||||
CALL HTML(METAH//'Created" Content="' !Convert the timestamp
|
||||
1 //D(1:4)//"-"//D(5:6)//"-"//D(7:8) !Into an international standard.
|
||||
2 //" "//T(1:2)//":"//T(3:4)//":"//T(5:10)//'">') !For date and time.
|
||||
IF (LUSERCODE.GT.0) CALL HTML(METAH !Possibly, the user's code is known.
|
||||
1 //'Author" Content="'//USERCODE(1:LUSERCODE) !If so, reveal.
|
||||
2 //'"> <!-- User code as reported by GetLog.-->') !Disclaiming responsibility...
|
||||
INDEEP = 1 !Finishing the content of the header.
|
||||
CALL HTML("</Head>") !Enough of that.
|
||||
CALL HTML("<BODY>") !A fresh line seems polite.
|
||||
INDEEP = 2 !Its content follows..
|
||||
END SUBROUTINE HTMLSTART !Others will follow on. Hopefully, correctly.
|
||||
SUBROUTINE HTMLSTOP !And hopefully, this will be a good closure.
|
||||
Could be more sophisticated and track the stack via INDEEP+- and names, to enable a desperate close-off if INDEEP is not 2.
|
||||
IF (INDEEP.NE.2) CALL ECART("Misclosure! InDeep not 2 but" !But,
|
||||
1 //I8FMT(INDEEP)) !It may not be.
|
||||
INDEEP = 1 !Retreat to the first level.
|
||||
CALL HTML("</BODY>") !End the "body".
|
||||
INDEEP = 0 !Retreat to the start level.
|
||||
CALL HTML("</HTML>") !End the whole thing.
|
||||
END SUBROUTINE HTMLSTOP !Ah...
|
||||
|
||||
SUBROUTINE HTMLTSTART(B,SUMMARY) !Start a table.
|
||||
INTEGER B !Border thickness.
|
||||
CHARACTER*(*) SUMMARY !Some well-chosen words.
|
||||
CALL HTML("<Table border="//I2FMT(B) !Just so. Text digits, or, digits in text?
|
||||
1 //' summary="'//SUMMARY//'">') !Not displayed, but potentially used by non-display agencies...
|
||||
INDEEP = INDEEP + 1 !Another level dug.
|
||||
END SUBROUTINE HTMLTSTART!That part was easy.
|
||||
SUBROUTINE HTMLTSTOP !And the ending is easy too.
|
||||
INDEEP = INDEEP - 1 !Withdraw a level.
|
||||
CALL HTML("</Table>") !Hopefully, aligning.
|
||||
END SUBROUTINE HTMLTSTOP !The bounds are easy.
|
||||
|
||||
SUBROUTINE HTMLTHEADSTART !Start a table's heading.
|
||||
CALL HTML("<tHead>") !Thus.
|
||||
INDEEP = INDEEP + 1 !Dig deeper.
|
||||
END SUBROUTINE HTMLTHEADSTART !Content should follow.
|
||||
SUBROUTINE HTMLTHEADSTOP !And now, enough.
|
||||
INDEEP = INDEEP - 1 !Retreat a level.
|
||||
CALL HTML("</tHead>") !And end the head.
|
||||
END SUBROUTINE HTMLTHEADSTOP !At the neck of the body?
|
||||
|
||||
SUBROUTINE HTMLTHEAD(N,TEXT) !Cast forth a whole-span table heading.
|
||||
INTEGER N !The count of columns to be spanned.
|
||||
CHARACTER*(*) TEXT !A brief description to place there.
|
||||
CALL HTML3("<tr><th colspan=",I8FMT(N)//' align="center">',"") !Start the specification.
|
||||
CALL HTML3("",TEXT(1:LSTNB(TEXT)),"</th></tr>") !This text, possibly verbose.
|
||||
END SUBROUTINE HTMLTHEAD !Thus, all contained on one line.
|
||||
|
||||
SUBROUTINE HTMLTBODYSTART !Start on the table body.
|
||||
CALL HTML('<tBody> <!--Profuse "align" usage ' !Simple, but I'm unhappy.
|
||||
1 //'for all cells can be factored out to "row" ' !Alas, so far as I can make out.
|
||||
2 //'but not to "body"-->') !And I don't think much of the "comment" formalism, either.
|
||||
INDEEP = INDEEP + 1 !Anyway, we're ready with the alignment.
|
||||
END SUBROUTINE HTMLTBODYSTART !Others will provide the body.
|
||||
SUBROUTINE HTMLTBODYSTOP !And, they've had enough.
|
||||
INDEEP = INDEEP - 1 !So, up out of the hole.
|
||||
CALL HTML("</tBody>") !Take a breath.
|
||||
END SUBROUTINE HTMLTBODYSTOP !And wander off.
|
||||
SUBROUTINE HTMLTROWTEXT(TEXT,N) !Roll a row of column headings.
|
||||
CHARACTER*(*) TEXT(:) !The headings.
|
||||
INTEGER N !Their number.
|
||||
INTEGER I,L !Assistants.
|
||||
CALL HTML3("<tr>","","") !Start a row of headings-to-come, and don't end the line.
|
||||
DO I = 1,N !Step through the headings.
|
||||
L = LSTNB(TEXT(I)) !Trailing spaces are to be ignored.
|
||||
IF (L.LE.0) THEN !Thus discovering blank texts.
|
||||
CALL HTML3("","<th> </th>","") !This prevents the cell being collapsed.
|
||||
ELSE !But for those with text,
|
||||
CALL HTML3("","<th>"//TEXT(I)(1:L)//"</th>","") !Roll it.
|
||||
END IF !So much for that text.
|
||||
END DO !On to the next.
|
||||
CALL HTML3("","","</tr>") !Finish the row, and thus the line.
|
||||
END SUBROUTINE HTMLTROWTEXT !So much for texts.
|
||||
SUBROUTINE HTMLTROWINTEGER(V,N) !Now for all integers.
|
||||
INTEGER V(:) !The integers.
|
||||
INTEGER N !Their number.
|
||||
INTEGER I !A stepper.
|
||||
CALL HTML3('<tr align="right">',"","") !Start a row of entries.
|
||||
DO I = 1,N !Work through the row's values.
|
||||
CALL HTML3("","<td>"//I8FMT(V(I))//"</td>","") !One by one.
|
||||
END DO !On to the next.
|
||||
CALL HTML3("","","</tr>") !Finish the row, and thus the line.
|
||||
END SUBROUTINE HTMLTROWINTEGER !All the same type is not troublesome.
|
||||
END MODULE HTMLSTUFF !Enough already.
|
||||
|
||||
PROGRAM MAKETABLE
|
||||
USE PARAMETERS
|
||||
USE ASSISTANCE
|
||||
USE HTMLSTUFF
|
||||
INTEGER KBD,MSG
|
||||
INTEGER NCOLS !The usage of V must conform to this!
|
||||
PARAMETER (NCOLS = 4) !Specified number of columns.
|
||||
CHARACTER*3 COLNAME(NCOLS) !And they have names.
|
||||
PARAMETER (COLNAME = (/"","X","Y","Z"/)) !As specified.
|
||||
INTEGER V(NCOLS) !A scratchpad for a line's worth.
|
||||
COMMON KBD,MSG !I/O units.
|
||||
KBD = 5 !Keyboard.
|
||||
MSG = 6 !Screen.
|
||||
CALL GETLOG(USERCODE) !Who has poked me into life?
|
||||
LUSERCODE = LSTNB(USERCODE) !Ah, text gnashing.
|
||||
|
||||
CALL HTMLSTART(MSG,"Powers","Table of integer powers") !Output to the screen will do.
|
||||
CALL HTMLTSTART(1,"Successive powers of successive integers") !Start the table.
|
||||
CALL HTMLTHEADSTART !The table heading.
|
||||
CALL HTMLTHEAD(NCOLS,"Successive powers") !A full-width heading.
|
||||
CALL HTMLTROWTEXT(COLNAME,NCOLS) !Headings for each column.
|
||||
CALL HTMLTHEADSTOP !So much for the heading.
|
||||
CALL HTMLTBODYSTART !Now for the content.
|
||||
DO I = 1,10 !This should be enough.
|
||||
V(1) = I !The unheaded row number.
|
||||
V(2) = I**2 !Its square.
|
||||
V(3) = I**3 !Cube.
|
||||
V(4) = I**4 !Fourth power.
|
||||
CALL HTMLTROWINTEGER(V,NCOLS) !Show a row's worth..
|
||||
END DO !On to the next line.
|
||||
CALL HTMLTBODYSTOP !No more content.
|
||||
CALL HTMLTSTOP !End the table.
|
||||
CALL HTMLSTOP
|
||||
END
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
Dim As Integer ncols = 3, nrows = 4
|
||||
Dim As Integer col, row
|
||||
|
||||
Print "<!DOCTYPE html>" & Chr(10) & "<html>"
|
||||
Print "<head></head>" & Chr(10) & "<body>"
|
||||
Print "<table border = 1 cellpadding = 10 cellspacing =0>"
|
||||
|
||||
For row = 0 To nrows
|
||||
If row = 0 Then
|
||||
Print "<tr><th></th>" ;
|
||||
Else
|
||||
Print "<tr><th>" & row & "</th>" ;
|
||||
End If
|
||||
For col = 1 To ncols
|
||||
If row = 0 Then
|
||||
Print "<th>" & Chr(87 + col) & "</th>" ;
|
||||
Else
|
||||
Print "<td align=""right"">" & Rnd(9999) & "</td>" ;
|
||||
End If
|
||||
Next col
|
||||
Print "</tr>"
|
||||
Next row
|
||||
|
||||
Print "</table>"
|
||||
Print "</body>" & Chr(10) & "</html>"
|
||||
Sleep
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
include "NSLog.incl"
|
||||
|
||||
_W = 87
|
||||
|
||||
local fn BuildHTMLTable
|
||||
NSinteger i, j
|
||||
CFMutableStringRef mutStr = fn MutableStringWithCapacity(0)
|
||||
|
||||
MutableStringAppendString( mutStr, @"<table style=\"width:15%\">\n" )
|
||||
MutableStringAppendString( mutStr, @" <tr><th></th>" )
|
||||
for j = 1 to 3
|
||||
MutableStringAppendFormat( mutStr, @"<th>%c</th>", _W + j )
|
||||
next
|
||||
MutableStringAppendString( mutStr, @"</tr>\n" )
|
||||
for i = 1 to 3
|
||||
MutableStringAppendFormat( mutStr, @" <tr><td>%d</td>", i )
|
||||
for j = 1 to 3
|
||||
MutableStringAppendFormat( mutStr, @"<td>%d</td>", rnd( 10000 ) )
|
||||
next
|
||||
MutableStringAppendString( mutStr, @"</tr>\n" )
|
||||
next
|
||||
MutableStringAppendString( mutStr, @"</table>" )
|
||||
NSLog( @"%@", mutStr )
|
||||
end fn
|
||||
|
||||
fn BuildHTMLTable
|
||||
|
||||
HandleEvents
|
||||
36
Task/Create-an-HTML-table/Go/create-an-html-table-1.go
Normal file
36
Task/Create-an-HTML-table/Go/create-an-html-table-1.go
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"os"
|
||||
)
|
||||
|
||||
type row struct {
|
||||
X, Y, Z int
|
||||
}
|
||||
|
||||
var tmpl = `<table>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
{{range $ix, $row := .}} <tr><td>{{$ix}}</td>
|
||||
<td>{{$row.X}}</td>
|
||||
<td>{{$row.Y}}</td>
|
||||
<td>{{$row.Z}}</td></tr>
|
||||
{{end}}</table>
|
||||
`
|
||||
|
||||
func main() {
|
||||
// create template
|
||||
ct := template.Must(template.New("").Parse(tmpl))
|
||||
|
||||
// make up data
|
||||
data := make([]row, 4)
|
||||
for r := range data {
|
||||
data[r] = row{r*3, r*3+1, r*3+2}
|
||||
}
|
||||
|
||||
// apply template to data
|
||||
if err := ct.Execute(os.Stdout, data); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
7
Task/Create-an-HTML-table/Go/create-an-html-table-2.go
Normal file
7
Task/Create-an-HTML-table/Go/create-an-html-table-2.go
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<table>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>0</td><td>0</td><td>1</td><td>2</td></tr>
|
||||
<tr><td>1</td><td>3</td><td>4</td><td>5</td></tr>
|
||||
<tr><td>2</td><td>6</td><td>7</td><td>8</td></tr>
|
||||
<tr><td>3</td><td>9</td><td>10</td><td>11</td></tr>
|
||||
</table>
|
||||
20
Task/Create-an-HTML-table/Groovy/create-an-html-table.groovy
Normal file
20
Task/Create-an-HTML-table/Groovy/create-an-html-table.groovy
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import groovy.xml.MarkupBuilder
|
||||
|
||||
def createTable(columns, rowCount) {
|
||||
def writer = new StringWriter()
|
||||
new MarkupBuilder(writer).table(style: 'border:1px solid;text-align:center;') {
|
||||
tr {
|
||||
th()
|
||||
columns.each { title -> th(title)}
|
||||
}
|
||||
(1..rowCount).each { row ->
|
||||
tr {
|
||||
td(row)
|
||||
columns.each { td((Math.random() * 9999) as int ) }
|
||||
}
|
||||
}
|
||||
}
|
||||
writer.toString()
|
||||
}
|
||||
|
||||
println createTable(['X', 'Y', 'Z'], 3)
|
||||
27
Task/Create-an-HTML-table/Haskell/create-an-html-table-1.hs
Normal file
27
Task/Create-an-HTML-table/Haskell/create-an-html-table-1.hs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import Data.List (unfoldr)
|
||||
import Control.Monad (forM_)
|
||||
|
||||
import qualified Text.Blaze.Html5 as B
|
||||
import Text.Blaze.Html.Renderer.Pretty (renderHtml)
|
||||
|
||||
import System.Random (RandomGen, getStdGen, randomRs, split)
|
||||
|
||||
makeTable
|
||||
:: RandomGen g
|
||||
=> [String] -> Int -> g -> B.Html
|
||||
makeTable headings nRows gen =
|
||||
B.table $
|
||||
do B.thead $ B.tr $ forM_ (B.toHtml <$> headings) B.th
|
||||
B.tbody $
|
||||
forM_
|
||||
(zip [1 .. nRows] $ unfoldr (Just . split) gen)
|
||||
(\(x, g) ->
|
||||
B.tr $
|
||||
forM_
|
||||
(take (length headings) (x : randomRs (1000, 9999) g))
|
||||
(B.td . B.toHtml))
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
g <- getStdGen
|
||||
putStrLn $ renderHtml $ makeTable ["", "X", "Y", "Z"] 3 g
|
||||
52
Task/Create-an-HTML-table/Haskell/create-an-html-table-2.hs
Normal file
52
Task/Create-an-HTML-table/Haskell/create-an-html-table-2.hs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{-# LANGUAGE QuasiQuotes #-}
|
||||
|
||||
import Data.List (elemIndex)
|
||||
import Text.Hamlet (shamlet, Html)
|
||||
import Text.Cassius (Css, renderCss, cassius)
|
||||
import Text.Blaze.Html.Renderer.String (renderHtml)
|
||||
import System.Random (getStdGen, randomRs)
|
||||
|
||||
styles :: p -> Css
|
||||
styles = [cassius|
|
||||
table, th, td
|
||||
border: 1px solid black
|
||||
border-collapse: collapse
|
||||
th, td
|
||||
padding: 15px
|
||||
th, .rowLabel
|
||||
background-color: #895
|
||||
td
|
||||
text-align: right
|
||||
|]
|
||||
|
||||
renderTable :: [[Int]] -> Html
|
||||
renderTable xs = [shamlet|
|
||||
$doctype 5
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
#{renderCss $ styles undefined}
|
||||
<body>
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
$forall header <- headers
|
||||
<th>#{header}
|
||||
$forall row <- xs
|
||||
<tr>
|
||||
$maybe index <- elemIndex row xs
|
||||
<td .rowLabel>#{index + 1}
|
||||
$nothing
|
||||
<td>?
|
||||
$forall cell <- row
|
||||
<td>#{cell}
|
||||
|]
|
||||
where
|
||||
headers = ['X', 'Y', 'Z']
|
||||
|
||||
main :: IO ()
|
||||
main = renderHtml . renderTable . rowsOf 3 . take 9 <$> randomValues >>= putStrLn
|
||||
where
|
||||
rowsOf _ [] = []
|
||||
rowsOf n xs = take n xs : rowsOf n (drop n xs)
|
||||
randomValues = randomRs (1, 9999) <$> getStdGen
|
||||
10
Task/Create-an-HTML-table/Icon/create-an-html-table-1.icon
Normal file
10
Task/Create-an-HTML-table/Icon/create-an-html-table-1.icon
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
procedure main()
|
||||
printf("<table>\n <tr><th></th><th>X</th><th>Y</th><th>Z</th>")
|
||||
every r := 1 to 4 do {
|
||||
printf("</tr>\n <tr><td>%d</td>",r)
|
||||
every 1 to 3 do printf("<td>%d</td>",?9999) # random 4 digit numbers per cell
|
||||
}
|
||||
printf("</tr>\n</table>\n")
|
||||
end
|
||||
|
||||
link printf
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<table>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>1</td><td>3129</td><td>3294</td><td>7013</td></tr>
|
||||
<tr><td>2</td><td>5045</td><td>169</td><td>5761</td></tr>
|
||||
<tr><td>3</td><td>7001</td><td>963</td><td>4183</td></tr>
|
||||
<tr><td>4</td><td>1695</td><td>1158</td><td>1240</td></tr>
|
||||
</table>
|
||||
10
Task/Create-an-HTML-table/J/create-an-html-table-1.j
Normal file
10
Task/Create-an-HTML-table/J/create-an-html-table-1.j
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
ele=:4 :0
|
||||
nm=. x-.LF
|
||||
lf=. x-.nm
|
||||
;('<',nm,'>') ,L:0 y ,L:0 '</',nm,'>',lf
|
||||
)
|
||||
|
||||
hTbl=:4 :0
|
||||
rows=. 'td' <@ele"1 ":&.>y
|
||||
'table' ele ('tr',LF) <@ele ('th' ele x); rows
|
||||
)
|
||||
8
Task/Create-an-HTML-table/J/create-an-html-table-2.j
Normal file
8
Task/Create-an-HTML-table/J/create-an-html-table-2.j
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
('';;:'X Y Z') hTbl ":&.>(i.5),.i.5 3
|
||||
<table><tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
<tr><td>0</td><td>0</td><td>1</td><td>2</td></tr>
|
||||
<tr><td>1</td><td>3</td><td>4</td><td>5</td></tr>
|
||||
<tr><td>2</td><td>6</td><td>7</td><td>8</td></tr>
|
||||
<tr><td>3</td><td>9</td><td>10</td><td>11</td></tr>
|
||||
<tr><td>4</td><td>12</td><td>13</td><td>14</td></tr>
|
||||
</table>
|
||||
1
Task/Create-an-HTML-table/J/create-an-html-table-3.j
Normal file
1
Task/Create-an-HTML-table/J/create-an-html-table-3.j
Normal file
|
|
@ -0,0 +1 @@
|
|||
jhtml ('';;:'X Y Z') hTbl ":&.>(i.5),.i.5 3
|
||||
|
|
@ -0,0 +1 @@
|
|||
import java.util.Random;
|
||||
24
Task/Create-an-HTML-table/Java/create-an-html-table-2.java
Normal file
24
Task/Create-an-HTML-table/Java/create-an-html-table-2.java
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
String generateHTMLTable() {
|
||||
StringBuilder string = new StringBuilder();
|
||||
string.append("<table border=\"1\">");
|
||||
string.append(System.lineSeparator());
|
||||
string.append("<tr>".indent(2));
|
||||
string.append("<th width=\"40\"></th>".indent(4));
|
||||
string.append("<th width=\"50\">X</th>".indent(4));
|
||||
string.append("<th width=\"50\">Y</th>".indent(4));
|
||||
string.append("<th width=\"50\">Z</th>".indent(4));
|
||||
string.append("</tr>".indent(2));
|
||||
Random random = new Random();
|
||||
int number;
|
||||
for (int countA = 0; countA < 10; countA++) {
|
||||
string.append("<tr>".indent(2));
|
||||
string.append("<td>%d</td>".formatted(countA).indent(4));
|
||||
for (int countB = 0; countB < 3; countB++) {
|
||||
number = random.nextInt(1, 9999);
|
||||
string.append("<td>%,d</td>".formatted(number).indent(4));
|
||||
}
|
||||
string.append("</tr>".indent(2));
|
||||
}
|
||||
string.append("</table>");
|
||||
return string.toString();
|
||||
}
|
||||
25
Task/Create-an-HTML-table/Java/create-an-html-table-3.java
Normal file
25
Task/Create-an-HTML-table/Java/create-an-html-table-3.java
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
public class HTML {
|
||||
|
||||
public static String array2HTML(Object[][] array){
|
||||
StringBuilder html = new StringBuilder(
|
||||
"<table>");
|
||||
for(Object elem:array[0]){
|
||||
html.append("<th>" + elem.toString() + "</th>");
|
||||
}
|
||||
for(int i = 1; i < array.length; i++){
|
||||
Object[] row = array[i];
|
||||
html.append("<tr>");
|
||||
for(Object elem:row){
|
||||
html.append("<td>" + elem.toString() + "</td>");
|
||||
}
|
||||
html.append("</tr>");
|
||||
}
|
||||
html.append("</table>");
|
||||
return html.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args){
|
||||
Object[][] ints = {{"","X","Y","Z"},{1,1,2,3},{2,4,5,6},{3,7,8,9},{4,10,11,12}};
|
||||
System.out.println(array2HTML(ints));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
<table><th></th><th>X</th><th>Y</th><th>Z</th><tr><td>1</td><td>1</td><td>2</td><td>3</td></tr><tr><td>2</td><td>4</td><td>5</td><td>6</td></tr><tr><td>3</td><td>7</td><td>8</td><td>9</td></tr><tr><td>4</td><td>10</td><td>11</td><td>12</td></tr></table>
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<html><head><title>Table maker</title><script type="application/javascript">
|
||||
|
||||
// normally, don't do this: at least name it something other than "a"
|
||||
Node.prototype.a = function (e) { this.appendChild(e); return this }
|
||||
|
||||
function ce(tag, txt) {
|
||||
var x = document.createElement(tag);
|
||||
x.textContent = (txt === undefined) ? '' : txt;
|
||||
return x;
|
||||
}
|
||||
|
||||
function make_table(cols, rows) {
|
||||
var tbl = ce('table', ''), tr = ce('tr'), th;
|
||||
|
||||
tbl.a(tr.a(ce('th')));
|
||||
|
||||
var z = 'Z'.charCodeAt(0);
|
||||
for (var l = z - cols + 1; l <= z; l++)
|
||||
tr.a(ce('th', String.fromCharCode(l)));
|
||||
|
||||
for (var r = 1; r <= rows; r++) {
|
||||
tbl.a(tr = ce('tr').a(ce('th', r)));
|
||||
for (var c = 0; c < cols; c++)
|
||||
tr.a(ce('td', Math.floor(Math.random() * 10000)));
|
||||
}
|
||||
|
||||
document.body
|
||||
.a(ce('style',
|
||||
'td, th {border: 1px solid #696;' +
|
||||
'padding:.4ex} td {text-align: right }' +
|
||||
'table { border-collapse: collapse}'))
|
||||
.a(tbl);
|
||||
}
|
||||
</script></head>
|
||||
<body><script>make_table(5, 4)</script></body></html>
|
||||
206
Task/Create-an-HTML-table/JavaScript/create-an-html-table-2.js
Normal file
206
Task/Create-an-HTML-table/JavaScript/create-an-html-table-2.js
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
(() => {
|
||||
'use strict';
|
||||
|
||||
// HTML ---------------------------------------------
|
||||
|
||||
// treeHTML :: tree
|
||||
// {tag :: String, text :: String, kvs :: Dict}
|
||||
// -> String
|
||||
const treeHTML = tree =>
|
||||
foldTree(
|
||||
(x, xs) => `<${x.tag + attribString(x.kvs)}>` + (
|
||||
'text' in x ? (
|
||||
x.text
|
||||
) : '\n'
|
||||
) + concat(xs) + `</${x.tag}>\n`)(
|
||||
tree
|
||||
);
|
||||
|
||||
// attribString :: Dict -> String
|
||||
const attribString = dct =>
|
||||
dct ? (
|
||||
' ' + Object.keys(dct)
|
||||
.reduce(
|
||||
(a, k) => a + k + '="' + dct[k] + '" ', ''
|
||||
).trim()
|
||||
) : '';
|
||||
|
||||
// TEST ---------------------------------------------
|
||||
const main = () => {
|
||||
const
|
||||
tableStyle = {
|
||||
style: "width:25%; border:2px solid silver;"
|
||||
},
|
||||
trStyle = {
|
||||
style: "border:1px solid silver;text-align:right;"
|
||||
},
|
||||
strCaption = 'Table generated by JS';
|
||||
|
||||
const
|
||||
n = 3,
|
||||
colNames = take(n)(enumFrom('A')),
|
||||
dataRows = map(
|
||||
x => Tuple(x)(map(randomRInt(100)(9999))(
|
||||
colNames
|
||||
)))(take(n)(enumFrom(1)));
|
||||
|
||||
const
|
||||
// TABLE AS TREE STRUCTURE -----------------
|
||||
tableTree = Node({
|
||||
tag: 'table',
|
||||
kvs: tableStyle
|
||||
},
|
||||
append([
|
||||
Node({
|
||||
tag: 'caption',
|
||||
text: 'Table source generated by JS'
|
||||
}),
|
||||
// HEADER ROW -----------------------
|
||||
Node({
|
||||
tag: 'tr',
|
||||
},
|
||||
map(k => Node({
|
||||
tag: 'th',
|
||||
kvs: {
|
||||
style: "text-align:right;"
|
||||
},
|
||||
text: k
|
||||
}))(cons('')(colNames))
|
||||
)
|
||||
// DATA ROWS ------------------------
|
||||
])(map(tpl => Node({
|
||||
tag: 'tr',
|
||||
kvs: trStyle
|
||||
}, cons(
|
||||
Node({
|
||||
tag: 'th',
|
||||
text: fst(tpl)
|
||||
}))(
|
||||
map(v => Node({
|
||||
tag: 'td',
|
||||
text: v.toString()
|
||||
}))(snd(tpl))
|
||||
)))(dataRows))
|
||||
);
|
||||
|
||||
// Return a value and/or apply console.log to it.
|
||||
// (JS embeddings vary in their IO channels)
|
||||
const strHTML = treeHTML(tableTree);
|
||||
return (
|
||||
console.log(strHTML)
|
||||
//strHTML
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// GENERIC FUNCTIONS --------------------------------
|
||||
|
||||
// Node :: a -> [Tree a] -> Tree a
|
||||
const Node = (v, xs) => ({
|
||||
type: 'Node',
|
||||
root: v,
|
||||
nest: xs || []
|
||||
});
|
||||
|
||||
// Tuple (,) :: a -> b -> (a, b)
|
||||
const Tuple = a => b => ({
|
||||
type: 'Tuple',
|
||||
'0': a,
|
||||
'1': b,
|
||||
length: 2
|
||||
});
|
||||
|
||||
// append (++) :: [a] -> [a] -> [a]
|
||||
// append (++) :: String -> String -> String
|
||||
const append = xs => ys => xs.concat(ys);
|
||||
|
||||
// chr :: Int -> Char
|
||||
const chr = String.fromCodePoint;
|
||||
|
||||
// concat :: [[a]] -> [a]
|
||||
// concat :: [String] -> String
|
||||
const concat = xs =>
|
||||
0 < xs.length ? (() => {
|
||||
const unit = 'string' !== typeof xs[0] ? (
|
||||
[]
|
||||
) : '';
|
||||
return unit.concat.apply(unit, xs);
|
||||
})() : [];
|
||||
|
||||
// cons :: a -> [a] -> [a]
|
||||
const cons = x => xs => [x].concat(xs);
|
||||
|
||||
// enumFrom :: a -> [a]
|
||||
function* enumFrom(x) {
|
||||
let v = x;
|
||||
while (true) {
|
||||
yield v;
|
||||
v = succ(v);
|
||||
}
|
||||
}
|
||||
|
||||
// enumFromToChar :: Char -> Char -> [Char]
|
||||
const enumFromToChar = m => n => {
|
||||
const [intM, intN] = [m, n].map(
|
||||
x => x.charCodeAt(0)
|
||||
);
|
||||
return Array.from({
|
||||
length: Math.floor(intN - intM) + 1
|
||||
}, (_, i) => String.fromCodePoint(intM + i));
|
||||
};
|
||||
|
||||
// foldTree :: (a -> [b] -> b) -> Tree a -> b
|
||||
const foldTree = f => tree => {
|
||||
const go = node =>
|
||||
f(node.root, node.nest.map(go));
|
||||
return go(tree);
|
||||
};
|
||||
|
||||
// fst :: (a, b) -> a
|
||||
const fst = tpl => tpl[0];
|
||||
|
||||
// isChar :: a -> Bool
|
||||
const isChar = x =>
|
||||
('string' === typeof x) && (1 === x.length);
|
||||
|
||||
// map :: (a -> b) -> [a] -> [b]
|
||||
const map = f => xs =>
|
||||
(Array.isArray(xs) ? (
|
||||
xs
|
||||
) : xs.split('')).map(f);
|
||||
|
||||
// ord :: Char -> Int
|
||||
const ord = c => c.codePointAt(0);
|
||||
|
||||
// randomRInt :: Int -> Int -> () -> Int
|
||||
const randomRInt = low => high => () =>
|
||||
low + Math.floor(
|
||||
(Math.random() * ((high - low) + 1))
|
||||
);
|
||||
|
||||
// snd :: (a, b) -> b
|
||||
const snd = tpl => tpl[1];
|
||||
|
||||
// succ :: Enum a => a -> a
|
||||
const succ = x =>
|
||||
isChar(x) ? (
|
||||
chr(1 + ord(x))
|
||||
) : isNaN(x) ? (
|
||||
undefined
|
||||
) : 1 + x;
|
||||
|
||||
// take :: Int -> [a] -> [a]
|
||||
// take :: Int -> String -> String
|
||||
const take = n => xs =>
|
||||
'GeneratorFunction' !== xs.constructor.constructor.name ? (
|
||||
xs.slice(0, n)
|
||||
) : [].concat.apply([], Array.from({
|
||||
length: n
|
||||
}, () => {
|
||||
const x = xs.next();
|
||||
return x.done ? [] : [x.value];
|
||||
}));
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
23
Task/Create-an-HTML-table/Jq/create-an-html-table-1.jq
Normal file
23
Task/Create-an-HTML-table/Jq/create-an-html-table-1.jq
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
def html_row:
|
||||
"<tr>",
|
||||
" \(.[] | "<td>\(.)</td>")",
|
||||
"</tr>";
|
||||
|
||||
def html_header:
|
||||
"<thead align = 'right'>",
|
||||
" \(html_row)",
|
||||
"</thead>";
|
||||
|
||||
def html_table(header):
|
||||
"<table>",
|
||||
" \(header | html_header)",
|
||||
" <tbody align = 'right'>",
|
||||
" \(.[] | html_row)",
|
||||
" </tbody",
|
||||
"</table>";
|
||||
|
||||
# Prepend the sequence number
|
||||
def html_table_with_sequence(header):
|
||||
length as $length
|
||||
| . as $in
|
||||
| [range(0;length) | [.+1] + $in[.]] | html_table(header);
|
||||
7
Task/Create-an-HTML-table/Jq/create-an-html-table-2.jq
Normal file
7
Task/Create-an-HTML-table/Jq/create-an-html-table-2.jq
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
def data:
|
||||
[ [4,5,6],
|
||||
[41, 51, 61],
|
||||
[401, 501, 601] ];
|
||||
|
||||
# The first column has no header
|
||||
data | html_table_with_sequence( ["", "X", "Y", "Z"] )
|
||||
31
Task/Create-an-HTML-table/Jq/create-an-html-table-3.jq
Normal file
31
Task/Create-an-HTML-table/Jq/create-an-html-table-3.jq
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
$ jq -r -n -f Create_an_HTML_table.jq
|
||||
<table>
|
||||
<thead align = 'right'>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>X</td>
|
||||
<td>Y</td>
|
||||
<td>Z</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody align = 'right'>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>4</td>
|
||||
<td>5</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>41</td>
|
||||
<td>51</td>
|
||||
<td>61</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>401</td>
|
||||
<td>501</td>
|
||||
<td>601</td>
|
||||
</tr>
|
||||
</tbody
|
||||
</table>
|
||||
13
Task/Create-an-HTML-table/Julia/create-an-html-table-1.julia
Normal file
13
Task/Create-an-HTML-table/Julia/create-an-html-table-1.julia
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
function tag(x::Pair, attr::Pair...)
|
||||
t, b = x
|
||||
attrstr = join(" $n=\"$p\"" for (n, p) in attr)
|
||||
return "<$t$attrstr>$b</$t>"
|
||||
end
|
||||
|
||||
colnames = split(",X,Y,Z", ',')
|
||||
|
||||
header = join(tag(:th => txt) for txt in colnames) * "\n"
|
||||
rows = collect(tag(:tr => join(tag(:td => i, :style => "font-weight: bold;") * join(tag(:td => rand(1000:9999)) for j in 1:3))) for i in 1:6)
|
||||
body = "\n" * join(rows, '\n') * "\n"
|
||||
table = tag(:table => string('\n', header, body, '\n'), :style => "width: 60%")
|
||||
println(table)
|
||||
11
Task/Create-an-HTML-table/Julia/create-an-html-table-2.julia
Normal file
11
Task/Create-an-HTML-table/Julia/create-an-html-table-2.julia
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<table style="width: 60%">
|
||||
<th></th><th>X</th><th>Y</th><th>Z</th>
|
||||
|
||||
<tr><td style="font-weight: bold;">1</td><td>5399</td><td>5770</td><td>3362</td></tr>
|
||||
<tr><td style="font-weight: bold;">2</td><td>4564</td><td>1577</td><td>5428</td></tr>
|
||||
<tr><td style="font-weight: bold;">3</td><td>6257</td><td>7290</td><td>6138</td></tr>
|
||||
<tr><td style="font-weight: bold;">4</td><td>3912</td><td>5163</td><td>2451</td></tr>
|
||||
<tr><td style="font-weight: bold;">5</td><td>1426</td><td>1874</td><td>3944</td></tr>
|
||||
<tr><td style="font-weight: bold;">6</td><td>3896</td><td>9827</td><td>7006</td></tr>
|
||||
|
||||
</table>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
// version 1.1.3
|
||||
|
||||
import java.util.Random
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val r = Random()
|
||||
val sb = StringBuilder()
|
||||
val i = " " // indent
|
||||
with (sb) {
|
||||
append("<html>\n<head>\n")
|
||||
append("<style>\n")
|
||||
append("table, th, td { border: 1px solid black; }\n")
|
||||
append("th, td { text-align: right; }\n")
|
||||
append("</style>\n</head>\n<body>\n")
|
||||
append("<table style=\"width:60%\">\n")
|
||||
append("$i<thead>\n")
|
||||
append("$i$i<tr><th></th>")
|
||||
for (c in 'X'..'Z') append("<th>$c</th>")
|
||||
append("</tr>\n")
|
||||
append("$i</thead>\n")
|
||||
append("$i<tbody>\n")
|
||||
val f = "$i$i<tr><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr>\n"
|
||||
for (j in 1..4) {
|
||||
append(f.format(j, r.nextInt(10000), r.nextInt(10000), r.nextInt(10000)))
|
||||
}
|
||||
append("$i</tbody>\n")
|
||||
append("</table>\n")
|
||||
append("</body>\n</html>")
|
||||
}
|
||||
println(sb.toString())
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<html>
|
||||
<head>
|
||||
<style>
|
||||
table, th, td { border: 1px solid black; }
|
||||
th, td { text-align: right; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table style="width:60%">
|
||||
<thead>
|
||||
<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>1</td><td>1444</td><td>3451</td><td>2568</td></tr>
|
||||
<tr><td>2</td><td>876</td><td>3866</td><td>824</td></tr>
|
||||
<tr><td>3</td><td>2710</td><td>3845</td><td>8089</td></tr>
|
||||
<tr><td>4</td><td>6480</td><td>7885</td><td>9246</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{table
|
||||
{@ style="background:#ffe; width:50%;"}
|
||||
{tr {@ style="text-align:right; font:bold 1.0em arial;"}
|
||||
{td } {td X} {td Y} {td Z}}
|
||||
{map {lambda {:i}
|
||||
{tr {td {b :i}}
|
||||
{map {lambda {_}
|
||||
{td {@ style="text-align:right; font:italic 1.0em courier;"}
|
||||
{floor {* {random} 10000}} }}
|
||||
{serie 1 3}}}}
|
||||
{serie 1 3}}}
|
||||
21
Task/Create-an-HTML-table/Lasso/create-an-html-table.lasso
Normal file
21
Task/Create-an-HTML-table/Lasso/create-an-html-table.lasso
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
define rand4dig => integer_random(9999, 1)
|
||||
|
||||
local(
|
||||
output = '<table border=2 cellpadding=5 cellspace=0>\n<tr>'
|
||||
)
|
||||
|
||||
with el in (' ,X,Y,Z') -> split(',') do {
|
||||
#output -> append('<th>' + #el + '</th>')
|
||||
}
|
||||
#output -> append('</tr>\n')
|
||||
|
||||
loop(5) => {
|
||||
#output -> append('<tr>\n<td style="font-weight: bold;">' + loop_count + '</td>')
|
||||
loop(3) => {
|
||||
#output -> append('<td>' + rand4dig + '</td>')
|
||||
}
|
||||
#output -> append('</tr>\n')
|
||||
}
|
||||
#output -> append('</table>\n')
|
||||
|
||||
#output
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
nomainwin
|
||||
|
||||
quote$ =chr$( 34)
|
||||
|
||||
html$ ="<html><head></head><body>"
|
||||
|
||||
html$ =html$ +"<table border =" +quote$ +"6"+ quote$ +" solid rules =none ; cellspacing =" +quote$ +"10" +quote$ +"> <th> </th> <th> X </th> <th> Y </th> <th> Z </th>"
|
||||
|
||||
for i =1 to 4
|
||||
d1$ =str$( i)
|
||||
d2$ =str$( int( 10000 *rnd( 1)))
|
||||
d3$ =str$( int( 10000 *rnd( 1)))
|
||||
d4$ =str$( int( 10000 *rnd( 1)))
|
||||
html$ =html$ +"<tr align ="; quote$; "right"; quote$; "> <th>"; d1$; " </th> <td>" +d2$ +" </td> <td>" +d3$ +" </td> <td>" +d4$ +" </td> </tr>"
|
||||
next i
|
||||
|
||||
html$ =html$ +"</table>"
|
||||
|
||||
html$ =html$ +"</body></html>"
|
||||
|
||||
open "table.html" for output as #o
|
||||
#o html$;
|
||||
close #o
|
||||
|
||||
address$ ="table.html"
|
||||
run "explorer.exe "; address$
|
||||
|
||||
timer 5000, [on]
|
||||
wait
|
||||
[on]
|
||||
timer 0
|
||||
|
||||
kill "table.html"
|
||||
|
||||
wait
|
||||
|
||||
sub quit w$
|
||||
close #w$
|
||||
end
|
||||
end sub
|
||||
25
Task/Create-an-HTML-table/Lingo/create-an-html-table-1.lingo
Normal file
25
Task/Create-an-HTML-table/Lingo/create-an-html-table-1.lingo
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
on htmlTable (data)
|
||||
str = "<table>"
|
||||
|
||||
-- table head
|
||||
put "<thead><tr><th> </th>" after str
|
||||
repeat with cell in data[1]
|
||||
put "<th>"&cell&"</th>" after str
|
||||
end repeat
|
||||
put "</tr></thead>" after str
|
||||
|
||||
-- table body
|
||||
put "<tbody>" after str
|
||||
cnt = data.count
|
||||
repeat with i = 2 to cnt
|
||||
put "<tr><td>"&(i-1)&"</td>" after str
|
||||
repeat with cell in data[i]
|
||||
put "<td>"&cell&"</td>" after str
|
||||
end repeat
|
||||
put "</tr>" after str
|
||||
end repeat
|
||||
put "</tbody>" after str
|
||||
|
||||
put "</table>" after str
|
||||
return str
|
||||
end
|
||||
12
Task/Create-an-HTML-table/Lingo/create-an-html-table-2.lingo
Normal file
12
Task/Create-an-HTML-table/Lingo/create-an-html-table-2.lingo
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
tableData = [\
|
||||
["X", "Y", "Z"],\
|
||||
["1", "2", "3"],\
|
||||
["4", "5", "6"],\
|
||||
["7", "8", "9"]\
|
||||
]
|
||||
|
||||
htmlCode = htmlTable(tableData)
|
||||
|
||||
-- render the result in a text member (which only supports simple/ancient HTML)
|
||||
m = new(#text)
|
||||
m.text = "<html><body>"&htmlCode&"</body></html>"
|
||||
24
Task/Create-an-HTML-table/Lua/create-an-html-table.lua
Normal file
24
Task/Create-an-HTML-table/Lua/create-an-html-table.lua
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
function htmlTable (data)
|
||||
local html = "<table>\n<tr>\n<th></th>\n"
|
||||
for _, heading in pairs(data[1]) do
|
||||
html = html .. "<th>" .. heading .. "</th>" .. "\n"
|
||||
end
|
||||
html = html .. "</tr>\n"
|
||||
for row = 2, #data do
|
||||
html = html .. "<tr>\n<th>" .. row - 1 .. "</th>\n"
|
||||
for _, field in pairs(data[row]) do
|
||||
html = html .. "<td>" .. field .. "</td>\n"
|
||||
end
|
||||
html = html .. "</tr>\n"
|
||||
end
|
||||
return html .. "</table>"
|
||||
end
|
||||
|
||||
local tableData = {
|
||||
{"X", "Y", "Z"},
|
||||
{"1", "2", "3"},
|
||||
{"4", "5", "6"},
|
||||
{"7", "8", "9"}
|
||||
}
|
||||
|
||||
print(htmlTable(tableData))
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
MODULE HtmlTable {
|
||||
tag$=LAMBDA$ (a$)-> {
|
||||
=LAMBDA$ a$ -> {
|
||||
IF ISNUM THEN w$=STR$(NUMBER,0) ELSE w$=LETTER$
|
||||
READ ? part$
|
||||
="<"+a$+IF$(LEN(part$)>0->" "+part$,"")+">"+w$+"</"+a$+">"+CHR$(13)+CHR$(10)
|
||||
}
|
||||
}
|
||||
INVENTORY Fun
|
||||
STACK NEW {
|
||||
DATA "html", "head", "body", "table", "tr", "th", "td"
|
||||
WHILE NOT EMPTY
|
||||
OVER ' duplicate top of stack
|
||||
APPEND Fun, LETTER$:=tag$(LETTER$)
|
||||
END WHILE
|
||||
}
|
||||
DEF body0$="",body$=""
|
||||
STACK NEW {
|
||||
DATA "", "X", "Y", "Z"
|
||||
FOR i=1 TO 4
|
||||
body0$+=Fun$("th")(LETTER$)
|
||||
z$=""
|
||||
FOR j=1 TO 3 : z$+=Fun$("td")(RANDOM(0, 9999), {align="right"}) : NEXT j
|
||||
body$+=Fun$("tr")(Fun$("th")(i)+z$)
|
||||
NEXT i
|
||||
}
|
||||
table$=fun$("table")(fun$("tr")(body0$)+body$,"border=1 cellpadding=10 cellspacing=0")
|
||||
DOCUMENT final$="<!DOCTYPE html>"+CHR$(13)+CHR$(10)
|
||||
final$=fun$("html")(fun$("head")("")+fun$("body")(table$), {lang="en"})
|
||||
file$="c:\doc.html"
|
||||
REPORT final$
|
||||
CLIPBOARD final$
|
||||
SAVE.DOC final$, file$
|
||||
WIN file$ ' execute, no wait
|
||||
}
|
||||
HtmlTable
|
||||
12
Task/Create-an-HTML-table/MATLAB/create-an-html-table.m
Normal file
12
Task/Create-an-HTML-table/MATLAB/create-an-html-table.m
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
function htmltable(fid,table,Label)
|
||||
fprintf(fid,'<table>\n <thead align = "right">\n');
|
||||
if nargin<3,
|
||||
fprintf(fid,' <tr><th></th><td>X</td><td>Y</td><td>Z</td></tr>\n </thead>\n <tbody align = "right">\n');
|
||||
else
|
||||
fprintf(fid,' <tr><th></th>');
|
||||
fprintf(fid,'<td>%s</td>',Label{:});
|
||||
fprintf(fid,'</tr>\n </thead>\n <tbody align = "right">\n');
|
||||
end;
|
||||
fprintf(fid,' <tr><td>%2i</td><td>%5i</td><td>%5i</td><td>%5i</td></tr>\n', [1:size(table,1);table']);
|
||||
fprintf(fid,' </tbody>\n</table>\n');
|
||||
end
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
x := RandomInteger[10];
|
||||
Print["<table>", "\n","<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>"]
|
||||
Scan[Print["<tr><td>", #, "</td><td>", x, "</td><td>", x, "</td><td>","</td></tr>"] & , Range[3]]
|
||||
Print["</table>"]
|
||||
47
Task/Create-an-HTML-table/Modula-2/create-an-html-table.mod2
Normal file
47
Task/Create-an-HTML-table/Modula-2/create-an-html-table.mod2
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
MODULE testCGI;
|
||||
|
||||
FROM InOut IMPORT WriteCard, WriteLn, WriteString, WriteBf;
|
||||
FROM Arguments IMPORT ArgTable, GetEnv;
|
||||
FROM Strings IMPORT Assign, Length, String;
|
||||
|
||||
VAR EnvVars : ArgTable;
|
||||
|
||||
PROCEDURE ReadEnvVar;
|
||||
|
||||
VAR Value : String;
|
||||
i : CARDINAL;
|
||||
|
||||
BEGIN
|
||||
WriteString ('<table border="1" cellpadding="4" width="80%" align="center">');
|
||||
WriteString ('<tr><th>Index</th><th>Length</th><th>Content</th></tr>');
|
||||
i := 0;
|
||||
LOOP
|
||||
IF EnvVars^ [i] = NIL THEN EXIT END;
|
||||
Assign (Value, EnvVars^ [i]^);
|
||||
WriteString ('<tr><td align="center">');
|
||||
WriteCard (i, 2);
|
||||
WriteString ('</td><td align="center">');
|
||||
WriteCard (Length (Value), 3);
|
||||
WriteString ('</td><td>'); WriteString (Value);
|
||||
WriteString ("</td></tr>");
|
||||
WriteLn;
|
||||
INC (i)
|
||||
END;
|
||||
WriteString("</table>");
|
||||
END ReadEnvVar;
|
||||
|
||||
BEGIN
|
||||
GetEnv (EnvVars);
|
||||
WriteString ('Content-type:text/html');
|
||||
WriteLn;
|
||||
WriteLn;
|
||||
WriteString ('<html><head>');
|
||||
WriteString ('<title>CGI with the Mocka Modula-2 compiler</title>');
|
||||
WriteString ('</head><body>');
|
||||
WriteLn;
|
||||
WriteString ('<center><h2>CGI environment passed along by your browser</h2></center><p>');
|
||||
ReadEnvVar;
|
||||
WriteString ('</body></html>');
|
||||
WriteLn;
|
||||
WriteBf
|
||||
END testCGI.
|
||||
20
Task/Create-an-HTML-table/Modula-3/create-an-html-table.mod3
Normal file
20
Task/Create-an-HTML-table/Modula-3/create-an-html-table.mod3
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
MODULE Table EXPORTS Main;
|
||||
|
||||
IMPORT IO, Random;
|
||||
FROM Fmt IMPORT Int, F;
|
||||
|
||||
BEGIN
|
||||
IO.Put("<table style=\"text-align:center; "
|
||||
& "border: 1px solid\"><th></th>"
|
||||
& "<th>X</th><th>Y</th><th><Z</th>");
|
||||
WITH rand = NEW(Random.Default).init() DO
|
||||
FOR I := 0 TO 3 DO
|
||||
IO.Put(F("<tr><th>%s</th><td>%s</td>"
|
||||
& "<td>%s</td><td>%s</td></tr>",
|
||||
Int(I),
|
||||
Int(rand.integer(0, 1000)),
|
||||
Int(rand.integer(0, 1000)),
|
||||
Int(rand.integer(0, 1000))));
|
||||
END;
|
||||
END;
|
||||
END Table.
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import Nanoquery.Util
|
||||
|
||||
random = new(Random)
|
||||
|
||||
println "<table>"
|
||||
|
||||
// generate header
|
||||
println "<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>"
|
||||
|
||||
// generate five rows
|
||||
for i in range(1, 5)
|
||||
println "<tr><td style=\"font-weight: bold;\">" + i + "</td>"
|
||||
println "<td>" + int($random.getInt(8999) + 1000) + "</td>"
|
||||
println "<td>" + int($random.getInt(8999) + 1000) + "</td>"
|
||||
println "<td>" + int($random.getInt(8999) + 1000) + "</td>"
|
||||
println "</tr>"
|
||||
end for
|
||||
|
||||
println "</table>"
|
||||
121
Task/Create-an-HTML-table/NetRexx/create-an-html-table-1.netrexx
Normal file
121
Task/Create-an-HTML-table/NetRexx/create-an-html-table-1.netrexx
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
/* NetRexx */
|
||||
options replace format comments java crossref symbols nobinary
|
||||
|
||||
-- create some test data. Put the data in a Rexx indexed string
|
||||
maxI = 1000
|
||||
rng = Random()
|
||||
xyz = ''
|
||||
xyz[0] = 1; xyz[1] = '. X Y Z' -- use a dot to indicate an empty cell
|
||||
loop r_ = 1 for 5
|
||||
ra = r_ rng.nextInt(maxI) rng.nextInt(maxI) rng.nextInt(maxI)
|
||||
xyz[0] = r_ + 1; xyz[r_ + 1] = ra
|
||||
end r_
|
||||
|
||||
-- build an HTML string
|
||||
html = htmlHeader()
|
||||
html = html || htmlTable(xyz)
|
||||
html = html || htmlFooter()
|
||||
|
||||
-- display HTML at standard output device
|
||||
say html
|
||||
|
||||
return
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- HTML boilerplate header
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
method htmlHeader() public static returns Rexx
|
||||
html = '<?xml version="1.0" encoding="UTF-8"?>\n' -
|
||||
|| '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n' -
|
||||
|| '<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">\n' -
|
||||
|| '<head>\n' -
|
||||
|| '<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>\n' -
|
||||
|| '<title>RCreateHTMLTable</title>\n' -
|
||||
|| '<style type="text/css">\n' -
|
||||
|| '<!--\n' -
|
||||
|| '/* <![DATA[ */\n' -
|
||||
|| 'body {font-family: "Lucida Grande", "Geneva", "Verdana", "Helvetica Neue", "Helvetica", "DejaVu Sans", "Arial", sans-serif;}\n' -
|
||||
|| 'table, th, td {table-layout: fixed; border: 1px solid black; border-collapse: collapse; padding: 0.25em; font-size: 85%;}\n' -
|
||||
|| 'th, td {width: 6em;}\n' -
|
||||
|| 'th {color: white; background-color: green;}\n' -
|
||||
|| 'td {text-align: right;}\n' -
|
||||
|| 'p.classname {\n' -
|
||||
|| ' font-size: inherit;\n' -
|
||||
|| '}\n' -
|
||||
|| '/* ]] */\n' -
|
||||
|| '//-->\n' -
|
||||
|| '</style>\n' -
|
||||
|| '</head>\n' -
|
||||
|| '<body>\n' -
|
||||
|| '<h1>Rosetta Code – NetRexx Sample Output</h2>\n' -
|
||||
|| '<h2><a href="http://rosettacode.org/wiki/Create_an_HTML_table">Create an HTML table</a></h2>\n' -
|
||||
|| ''
|
||||
|
||||
return html
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- HTML footer
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
method htmlFooter() public static returns Rexx
|
||||
html = '</body>\n' -
|
||||
|| '</html>\n' -
|
||||
|| ''
|
||||
return html
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- Create the table
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
method htmlTable(rows, caption = '') public static returns Rexx
|
||||
html = '<table>\n'
|
||||
if caption.length() > 0 then do
|
||||
html = html -
|
||||
|| '<caption>'caption'</caption>\n' -
|
||||
|| '<thead>\n' -
|
||||
|| ''
|
||||
end
|
||||
html = html -
|
||||
|| htmlCsvTableRow(rows[1], 'th')'\n' -
|
||||
|| '</thead>\n' -
|
||||
|| '<tbody>\n' -
|
||||
|| ''
|
||||
loop r_ = 2 to rows[0]
|
||||
html = html -
|
||||
|| htmlCsvTableRow(rows[r_])
|
||||
end r_
|
||||
html = html -
|
||||
|| '</tbody>\n' -
|
||||
|| '</table>\n' -
|
||||
|| ''
|
||||
return html
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- Add a row to the table
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
method htmlCsvTableRow(row, tag = 'td', sep = ' ', emptyCell = '.') public static returns Rexx
|
||||
if tag = null then tag = 'td'
|
||||
row = row.strip('t')
|
||||
-- replace HTML special characters with symbol entities
|
||||
row = row.changestr('&', '&') -- need to do this one first to avoid double translation
|
||||
row = row.changestr('"', '"')
|
||||
row = row.changestr("'", ''')
|
||||
row = row.changestr('<', '<')
|
||||
row = row.changestr('>', '>')
|
||||
elmts = ''
|
||||
elmts[0] = 0
|
||||
e_ = 0
|
||||
loop while row.length() > 0
|
||||
parse row elmt (sep) row
|
||||
if elmt == emptyCell then elmt = ' ' -- replace empy cells with non-breaking spaces
|
||||
e_ = e_ + 1; elmts[0] = e_; elmts[e_] = elmt
|
||||
end
|
||||
html = '<tr>\n' -
|
||||
|| ''
|
||||
loop e_ = 1 to elmts[0]
|
||||
html = html -
|
||||
|| '<'tag'>'elmts[e_]'</'tag'>\n' -
|
||||
|| ''
|
||||
end e_
|
||||
html = html -
|
||||
|| '</tr>\n' -
|
||||
|| ''
|
||||
return html
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
|
||||
<title>RCreateHTMLTable</title>
|
||||
<style type="text/css">
|
||||
<!--
|
||||
/* <![DATA[ */
|
||||
body {font-family: "Lucida Grande", "Geneva", "Verdana", "Helvetica Neue", "Helvetica", "DejaVu Sans", "Arial", sans-serif;}
|
||||
table, th, td {table-layout: fixed; border: 1px solid black; border-collapse: collapse; padding: 0.25em; font-size: 85%;}
|
||||
th, td {width: 6em;}
|
||||
th {color: white; background-color: green;}
|
||||
td {text-align: right;}
|
||||
p.classname {
|
||||
font-size: inherit;
|
||||
}
|
||||
/* ]] */
|
||||
//-->
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Rosetta Code – NetRexx Sample Output</h2>
|
||||
<h2><a href="http://rosettacode.org/wiki/Create_an_HTML_table">Create an HTML table</a></h2>
|
||||
<table>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>X</th>
|
||||
<th>Y</th>
|
||||
<th>Z</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>626</td>
|
||||
<td>128</td>
|
||||
<td>386</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>985</td>
|
||||
<td>568</td>
|
||||
<td>636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>639</td>
|
||||
<td>622</td>
|
||||
<td>591</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>843</td>
|
||||
<td>268</td>
|
||||
<td>436</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>132</td>
|
||||
<td>526</td>
|
||||
<td>251</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
56
Task/Create-an-HTML-table/NewLISP/create-an-html-table.l
Normal file
56
Task/Create-an-HTML-table/NewLISP/create-an-html-table.l
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
; file: html-table.lsp
|
||||
; url: http://rosettacode.org/wiki/Create_an_HTML_table
|
||||
; author: oofoe 2012-01-29
|
||||
|
||||
(seed (time-of-day)) ; Initialize random number generator.
|
||||
|
||||
; The "tab" variable tracks the HTML indent. "pad" composes a line
|
||||
; with the appropriate indent and a terminal newline.
|
||||
|
||||
(setq tab 0)
|
||||
(define (pad text) (string (dup " " tab) text "\n"))
|
||||
|
||||
; NewLISP allows almost any character in an identifier, so I can name
|
||||
; my functions after the HTML elements they invoke. This one formats a
|
||||
; single table data cell.
|
||||
|
||||
(define (<td> text) (pad (string "<td>" text "</td>")))
|
||||
|
||||
; "<tr>" will accept either a number of arguments, each one to be
|
||||
; formatted as a table cell, or a single list argument, which is
|
||||
; broken into table cells. For convenience, I format each list item
|
||||
; with the "<td>" function so I can feed it raw lists.
|
||||
|
||||
(define (<tr>)
|
||||
(let ((data (args))
|
||||
(s (pad "<tr>")))
|
||||
|
||||
(if (list? (data 0)) (setq data (data 0)))
|
||||
|
||||
(inc tab)
|
||||
(dolist (el data) (extend s (<td> el)))
|
||||
(dec tab)
|
||||
|
||||
(extend s (pad "</tr>"))
|
||||
s))
|
||||
|
||||
; By defining "<table>" as a macro, I ensure that the rows won't be
|
||||
; evaluated until I've got the table started, which preserves the
|
||||
; formatting.
|
||||
|
||||
(define-macro (<table>)
|
||||
(let ((s (pad "<table>")))
|
||||
(inc tab) (doargs (row) (extend s (eval row))) (dec tab)
|
||||
(extend s (pad "</table>"))
|
||||
s
|
||||
))
|
||||
|
||||
; Test
|
||||
|
||||
(print (<table> (<tr> "" "X" "Y" "Z")
|
||||
(<tr> (cons 0 (rand 1000 3)))
|
||||
(<tr> (cons 1 (rand 1000 3)))
|
||||
(<tr> (cons 2 (rand 1000 3)))
|
||||
))
|
||||
|
||||
(exit)
|
||||
14
Task/Create-an-HTML-table/Nim/create-an-html-table.nim
Normal file
14
Task/Create-an-HTML-table/Nim/create-an-html-table.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
import random, htmlgen
|
||||
randomize()
|
||||
|
||||
template randTD(): string = td($rand(1000..9999))
|
||||
proc randTR(x: int): string =
|
||||
tr(td($x, style="font-weight: bold"), randTD, randTD, randTD)
|
||||
|
||||
echo table(
|
||||
tr(th"", th"X", th"Y", th"Z"),
|
||||
randTR 1,
|
||||
randTR 2,
|
||||
randTR 3,
|
||||
randTR 4,
|
||||
randTR 5)
|
||||
23
Task/Create-an-HTML-table/OCaml/create-an-html-table-1.ocaml
Normal file
23
Task/Create-an-HTML-table/OCaml/create-an-html-table-1.ocaml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
let () =
|
||||
let buf = Buffer.create 1 in
|
||||
let s = Buffer.add_string buf in
|
||||
Random.self_init();
|
||||
s "<table>";
|
||||
s "<thead align='right'>";
|
||||
s "<tr><th></th>";
|
||||
List.iter (fun v ->
|
||||
s ("<td>" ^ v ^ "</td>")
|
||||
) ["X"; "Y"; "Z"];
|
||||
s "</tr>";
|
||||
s "</thead>";
|
||||
s "<tbody align='right'>";
|
||||
for i = 0 to pred 3 do
|
||||
s ("<tr><td>" ^ string_of_int i ^ "</td>");
|
||||
for j = 0 to pred 3 do
|
||||
s ("<td>" ^ string_of_int (Random.int 1000) ^ "</td>");
|
||||
done;
|
||||
s "</tr>";
|
||||
done;
|
||||
s "</tbody>";
|
||||
s "</table>";
|
||||
print_endline (Buffer.contents buf)
|
||||
39
Task/Create-an-HTML-table/OCaml/create-an-html-table-2.ocaml
Normal file
39
Task/Create-an-HTML-table/OCaml/create-an-html-table-2.ocaml
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
open XHTML.M_01_01
|
||||
|
||||
let _td s = td [pcdata s]
|
||||
let _th s = th [pcdata s]
|
||||
|
||||
let my_table =
|
||||
table ~a:[a_border 1]
|
||||
(tr
|
||||
(_th "") [
|
||||
(_th "X");
|
||||
(_th "Y");
|
||||
(_th "Z")]
|
||||
)
|
||||
[
|
||||
(tr
|
||||
(_td "1") [
|
||||
(_td "aa");
|
||||
(_td "bb");
|
||||
(_td "cc")]
|
||||
);
|
||||
(tr
|
||||
(_td "2") [
|
||||
(_td "dd");
|
||||
(_td "ee");
|
||||
(_td "ff")]
|
||||
);
|
||||
]
|
||||
|
||||
let my_page =
|
||||
html
|
||||
(head (title (pcdata "My Page")) [])
|
||||
(body
|
||||
[ h1 [pcdata "My Table"];
|
||||
my_table;
|
||||
]
|
||||
)
|
||||
|
||||
let () =
|
||||
pretty_print ~width:80 print_string my_page
|
||||
25
Task/Create-an-HTML-table/OCaml/create-an-html-table-3.ocaml
Normal file
25
Task/Create-an-HTML-table/OCaml/create-an-html-table-3.ocaml
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#use "topfind"
|
||||
#require "tyxml"
|
||||
|
||||
module X = Xhtml.M_01_01 (* XHTML 1.1 *)
|
||||
module P = Xhtml.P_01_01
|
||||
|
||||
let make_table () =
|
||||
let td1 = X.td [X.pcdata "1"] in
|
||||
let td2 = X.td [X.pcdata "2"] in
|
||||
let td3 = X.td [X.pcdata "3"] in
|
||||
let my_tr = X.tr td1 [td2; td3] in
|
||||
let my_table = X.table my_tr [] in
|
||||
(my_table)
|
||||
|
||||
let () =
|
||||
let my_title = X.title (X.pcdata "My Page") in
|
||||
let my_head = X.head my_title [] in
|
||||
let my_h1 = X.h1 [X.pcdata "My Table"] in
|
||||
|
||||
let my_table = make_table () in
|
||||
|
||||
let my_body = X.body [my_h1; my_table] in
|
||||
let my_html = X.html my_head my_body in
|
||||
P.print print_endline my_html;
|
||||
;;
|
||||
11
Task/Create-an-HTML-table/OCaml/create-an-html-table-4.ocaml
Normal file
11
Task/Create-an-HTML-table/OCaml/create-an-html-table-4.ocaml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
let make_table () =
|
||||
let br = X.a_border 1 in
|
||||
let th s = X.th [X.pcdata s] in
|
||||
let td s = X.td [X.pcdata s] in
|
||||
let my_thead = X.thead (X.tr (th "") [th "X"; th "Y"; th "Z"]) [] in
|
||||
let my_tr1 = X.tr (td "1") [td "AAA"; td "BBB"; td "CCC"] in
|
||||
let my_tr2 = X.tr (td "2") [td "DDD"; td "EEE"; td "FFF"] in
|
||||
let my_tr3 = X.tr (td "3") [td "GGG"; td "HHH"; td "III"] in
|
||||
let my_tbody = X.tbody my_tr1 [my_tr2; my_tr3] in
|
||||
let my_table = X.tablex ~thead:my_thead ~a:[br] my_tbody [] in
|
||||
(my_table)
|
||||
33
Task/Create-an-HTML-table/Objeck/create-an-html-table.objeck
Normal file
33
Task/Create-an-HTML-table/Objeck/create-an-html-table.objeck
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
class CreateTable {
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
s := String->New();
|
||||
|
||||
s->Append("<table>");
|
||||
s->Append("<thead align = \"right\">");
|
||||
s->Append("<tr><th></th>");
|
||||
td := "XYZ";
|
||||
for(i:=0; i<3; i+=1;) {
|
||||
s->Append("<td>");
|
||||
s->Append(td->Get(i));
|
||||
s->Append("</td>");
|
||||
};
|
||||
s->Append("</tr>");
|
||||
s->Append("</thead>");
|
||||
s->Append("<tbody align = \"right\">");
|
||||
for(i:=0; i<3; i+=1;) {
|
||||
s->Append("<tr><td>");
|
||||
s->Append(i);
|
||||
s->Append("</td>");
|
||||
for(j:=0; j<3; j+=1;) {
|
||||
s->Append("<td>");
|
||||
s->Append((Float->Random() * 10000)->As(Int));
|
||||
s->Append("</td>");
|
||||
};
|
||||
s->Append("</tr>");
|
||||
};
|
||||
s->Append("</tbody>");
|
||||
s->Append("</table>");
|
||||
|
||||
s->PrintLine();
|
||||
}
|
||||
}
|
||||
41
Task/Create-an-HTML-table/Oz/create-an-html-table.oz
Normal file
41
Task/Create-an-HTML-table/Oz/create-an-html-table.oz
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
declare
|
||||
|
||||
[Roads] = {Module.link ['x-ozlib://wmeyer/roads/Roads.ozf']}
|
||||
|
||||
fun {Table Session}
|
||||
html(
|
||||
head(title("Show a table with row and column headings")
|
||||
style(type:"text/css"
|
||||
css(td 'text-align':center)
|
||||
))
|
||||
body(
|
||||
{TagFromList table
|
||||
tr(th th("X") th("Y") th("Z"))
|
||||
|
|
||||
{CreateRows 3 5}
|
||||
}))
|
||||
end
|
||||
|
||||
fun {CreateRows NumCols NumRows}
|
||||
{List.map {List.number 1 NumRows 1}
|
||||
fun {$ Row}
|
||||
{TagFromList tr
|
||||
td( {Int.toString Row} )
|
||||
|
|
||||
{List.map {List.number 1 NumCols 1}
|
||||
fun {$ Col}
|
||||
SequentialNumber = (Row-1)*NumCols + Col
|
||||
in
|
||||
td( {Int.toString SequentialNumber} )
|
||||
end
|
||||
}}
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
TagFromList = List.toTuple
|
||||
|
||||
in
|
||||
|
||||
{Roads.registerFunction table Table}
|
||||
{Roads.run}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
html(n=3)={
|
||||
print("<table>\n<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>");
|
||||
for(i=1,n,
|
||||
print1("<tr><td>"i"</td>");
|
||||
for(j=1,3,print1("<td>"random(9999)"</td>"));
|
||||
print("</tr>")
|
||||
);
|
||||
print("</table>")
|
||||
};
|
||||
|
|
@ -0,0 +1 @@
|
|||
printtex(matrix(4,4,i,j,if(i==1,if(j==1,"",Strchr(86+j)),if(j==1,i,random(9999)))))
|
||||
36
Task/Create-an-HTML-table/PHP/create-an-html-table-1.php
Normal file
36
Task/Create-an-HTML-table/PHP/create-an-html-table-1.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
/**
|
||||
* @author Elad Yosifon
|
||||
* @desc HTML Table - normal style
|
||||
*/
|
||||
$cols = array('', 'X', 'Y', 'Z');
|
||||
$rows = 3;
|
||||
|
||||
$html = '<html><body><table><colgroup>';
|
||||
foreach($cols as $col)
|
||||
{
|
||||
$html .= '<col style="text-align: left;" />';
|
||||
}
|
||||
unset($col);
|
||||
$html .= '</colgroup><thead><tr>';
|
||||
|
||||
foreach($cols as $col)
|
||||
{
|
||||
$html .= "<td>{$col}</td>";
|
||||
}
|
||||
unset($col);
|
||||
|
||||
$html .= '</tr></thead><tbody>';
|
||||
for($r = 1; $r <= $rows; $r++)
|
||||
{
|
||||
$html .= '<tr>';
|
||||
foreach($cols as $key => $col)
|
||||
{
|
||||
$html .= '<td>' . (($key > 0) ? rand(1, 9999) : $r) . '</td>';
|
||||
}
|
||||
unset($col);
|
||||
$html .= '</tr>';
|
||||
}
|
||||
$html .= '</tbody></table></body></html>';
|
||||
|
||||
echo $html;
|
||||
35
Task/Create-an-HTML-table/PHP/create-an-html-table-2.php
Normal file
35
Task/Create-an-HTML-table/PHP/create-an-html-table-2.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
/**
|
||||
* @author Elad Yosifon
|
||||
* @desc HTML Table - template engine style
|
||||
*/
|
||||
$cols = array('', 'X', 'Y', 'Z');
|
||||
$rows = 3;
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
<table>
|
||||
<colgroup>
|
||||
<?php foreach($cols as $col):?>
|
||||
<col style="text-align: left;" />
|
||||
<?php endforeach; unset($col) ?>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php foreach($cols as $col): ?>
|
||||
<td><?php echo $col?></td>
|
||||
<?php endforeach; unset($col)?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php for($r = 1; $r <= $rows; $r++): ?>
|
||||
<tr>
|
||||
<?php foreach($cols as $key => $col): ?>
|
||||
<td><?php echo ($key > 0) ? rand(1, 9999) : $r ?></td>
|
||||
<?php endforeach; unset($col) ?>
|
||||
</tr>
|
||||
<?php endfor; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
44
Task/Create-an-HTML-table/PL-I/create-an-html-table.pli
Normal file
44
Task/Create-an-HTML-table/PL-I/create-an-html-table.pli
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* Create an HTML table. 6/2011 */
|
||||
|
||||
create: procedure options (main);
|
||||
|
||||
|
||||
create_table: procedure (headings, table_contents);
|
||||
|
||||
declare headings(*) character (10) varying;
|
||||
declare table_contents(*, *) fixed;
|
||||
declare (i, row, col) fixed;
|
||||
|
||||
put skip edit ('<table>') (a);
|
||||
/* Headings. */
|
||||
put skip edit ('<tr><th></th> ') (a);
|
||||
/* For an empty column heading */
|
||||
do i = 1 to hbound(headings);
|
||||
put edit ('<th>', headings(i), '</th> ' ) (a);
|
||||
end;
|
||||
put edit ('</tr>') (a);
|
||||
|
||||
/* Table contents. */
|
||||
|
||||
do row = 1 to hbound(table_contents, 1);
|
||||
/* row number */
|
||||
put skip edit ('<tr><td>', row, '</td> ') (a);
|
||||
/* row contents */
|
||||
do col = 1 to hbound(table_contents, 2);
|
||||
put edit ('<td>', table_contents(row, col), '</td> ' ) (a);
|
||||
end;
|
||||
put edit ('</tr>') (a);
|
||||
end;
|
||||
put skip edit ('</table>' ) (a);
|
||||
end create_table;
|
||||
|
||||
declare headings (3) character (1) static initial ('X', 'Y', 'Z');
|
||||
|
||||
declare table_contents(3, 3) fixed static initial (
|
||||
4, -3, 8,
|
||||
7, 2, -6,
|
||||
11, 1, 15);
|
||||
|
||||
call create_table (headings, table_contents);
|
||||
|
||||
end create;
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<@ SDCLIT>
|
||||
<@ DTBLIT>
|
||||
<@ DTRLITLIT>
|
||||
<@ DTDLITLIT>|[style]background-color:white</@>
|
||||
<@ DTD>X</@>
|
||||
<@ DTD>Y</@>
|
||||
<@ DTD>Z</@>|[style]width:100%; background-color:brown;color:white; text-align:center</@>
|
||||
<@ ITEFORLIT>10|
|
||||
<@ DTRLITCAP>
|
||||
<@ DTDPOSFORLIT>...|[style]background-color:Brown; color:white; text-align:right</@>
|
||||
<@ DTDCAPLIT><@ SAYR!ILI2>1|9999</@>|[style]width:50;text-align:right</@>
|
||||
<@ DTDCAPLIT><@ SAYR!ILI2>1|9999</@>|[style]width:50;text-align:right</@>
|
||||
<@ DTDCAPLIT><@ SAYR!ILI2>1|9999</@>|[style]width:50;text-align:right</@>
|
||||
|[style]background-color:white;color:black</@>
|
||||
</@>
|
||||
</@>
|
||||
|Number Table</@>
|
||||
13
Task/Create-an-HTML-table/Perl/create-an-html-table.pl
Normal file
13
Task/Create-an-HTML-table/Perl/create-an-html-table.pl
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
my @heading = qw(X Y Z);
|
||||
my $rows = 5;
|
||||
print '<table><thead><td>',
|
||||
(map { "<th>$_</th>" } @heading),
|
||||
"</thead><tbody>";
|
||||
|
||||
for (1 .. $rows) {
|
||||
print "<tr><th>$_</th>",
|
||||
(map { "<td>".int(rand(10000))."</td>" } @heading),
|
||||
"</tr>";
|
||||
}
|
||||
|
||||
print "</tbody></table>";
|
||||
16
Task/Create-an-HTML-table/Phix/create-an-html-table-1.phix
Normal file
16
Task/Create-an-HTML-table/Phix/create-an-html-table-1.phix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-->
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"<table border=2>\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" <tr><th></th>"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"<th>%s</th>"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'W'</span><span style="color: #0000FF;">+</span><span style="color: #000000;">j</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"</tr>\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" <tr><td>%d</td>"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"<td>%d</td>"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">10000</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"</tr>\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"</table>"</span><span style="color: #0000FF;">)</span>
|
||||
<!--
|
||||
21
Task/Create-an-HTML-table/Phix/create-an-html-table-2.phix
Normal file
21
Task/Create-an-HTML-table/Phix/create-an-html-table-2.phix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
-->
|
||||
<span style="color: #008080;">include</span> <span style="color: #000000;">xml<span style="color: #0000FF;">.<span style="color: #000000;">e</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">contents</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{<span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">r<span style="color: #0000FF;">=<span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">rowcontent</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{<span style="color: #0000FF;">}</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">thtd</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff<span style="color: #0000FF;">(<span style="color: #000000;">r<span style="color: #0000FF;">=<span style="color: #000000;">0<span style="color: #0000FF;">?<span style="color: #008000;">"th"<span style="color: #0000FF;">:<span style="color: #008000;">"td"<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">c<span style="color: #0000FF;">=<span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">content</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff<span style="color: #0000FF;">(<span style="color: #000000;">r<span style="color: #0000FF;">=<span style="color: #000000;">0<span style="color: #0000FF;">?<span style="color: #008000;">"XYZ"<span style="color: #0000FF;">[<span style="color: #7060A8;">max<span style="color: #0000FF;">(<span style="color: #000000;">1<span style="color: #0000FF;">,<span style="color: #000000;">c<span style="color: #0000FF;">)<span style="color: #0000FF;">..<span style="color: #000000;">c<span style="color: #0000FF;">]<span style="color: #0000FF;">:</span>
|
||||
<span style="color: #7060A8;">sprintf<span style="color: #0000FF;">(<span style="color: #008000;">"%d"<span style="color: #0000FF;">,<span style="color: #008080;">iff<span style="color: #0000FF;">(<span style="color: #000000;">c<span style="color: #0000FF;">=<span style="color: #000000;">0<span style="color: #0000FF;">?<span style="color: #000000;">r<span style="color: #0000FF;">:<span style="color: #7060A8;">rand<span style="color: #0000FF;">(<span style="color: #000000;">9999<span style="color: #0000FF;">)<span style="color: #0000FF;">)<span style="color: #0000FF;">)<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">col</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_new_element<span style="color: #0000FF;">(<span style="color: #000000;">thtd<span style="color: #0000FF;">,<span style="color: #000000;">content<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">col</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_set_attribute<span style="color: #0000FF;">(<span style="color: #000000;">col<span style="color: #0000FF;">,<span style="color: #008000;">"style"<span style="color: #0000FF;">,<span style="color: #008000;">"text-align:right; padding: 5px;"<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">rowcontent</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append<span style="color: #0000FF;">(<span style="color: #000000;">rowcontent<span style="color: #0000FF;">,<span style="color: #000000;">col<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">row</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_new_element<span style="color: #0000FF;">(<span style="color: #008000;">"tr"<span style="color: #0000FF;">,<span style="color: #000000;">rowcontent<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">contents</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append<span style="color: #0000FF;">(<span style="color: #000000;">contents<span style="color: #0000FF;">,<span style="color: #000000;">row<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">table</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_new_element<span style="color: #0000FF;">(<span style="color: #008000;">"table"<span style="color: #0000FF;">,<span style="color: #000000;">contents<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">table</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_set_attribute<span style="color: #0000FF;">(<span style="color: #000000;">table<span style="color: #0000FF;">,</span> <span style="color: #008000;">"border"<span style="color: #0000FF;">,</span> <span style="color: #008000;">"2"<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">doc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">xml_new_doc<span style="color: #0000FF;">(<span style="color: #000000;">table<span style="color: #0000FF;">,<span style="color: #008000;">""<span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">puts<span style="color: #0000FF;">(<span style="color: #000000;">1<span style="color: #0000FF;">,<span style="color: #7060A8;">xml_sprint<span style="color: #0000FF;">(<span style="color: #000000;">doc<span style="color: #0000FF;">)<span style="color: #0000FF;">)
|
||||
<!--
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue