370 lines
6.6 KiB
Awk
370 lines
6.6 KiB
Awk
/*
|
|
* $Id: doc.awk,v 1.4 2007/09/06 09:05:32 bacon Exp $
|
|
*
|
|
* {License}
|
|
*/
|
|
|
|
global header, mode;
|
|
global empty_line_count;
|
|
global para_started;
|
|
global list_count;
|
|
global table_row_count;
|
|
global table_row_line_count;
|
|
global table_in_th;
|
|
global tabs;
|
|
|
|
function print_text (full)
|
|
{
|
|
local fra1, fra2, link, idx, t1, t2;
|
|
|
|
gsub ("<", "\\<", full);
|
|
gsub (">", "\\>", full);
|
|
gsub (/\t/, tabs, full);
|
|
|
|
while (match (full, /\{[^{},]+,[^{},]+\}/) > 0)
|
|
{
|
|
fra1 = substr (full, 1, RSTART-1);
|
|
link = substr (full, RSTART, RLENGTH);
|
|
fra2 = substr (full, RSTART+RLENGTH, length(full)-RLENGTH);
|
|
|
|
idx = index(link, ",");
|
|
t1 = substr (link, 2, idx-2);
|
|
t2 = substr (link, idx+1, length(link)-idx-1);
|
|
|
|
full = sprintf ("%s<a href='%s'>%s</a>%s", fra1, t2, t1, fra2);
|
|
}
|
|
|
|
while (match (full, /##\/[^\[\][:space:]]+\/##/) > 0)
|
|
{
|
|
fra1 = substr (full, 1, RSTART-1);
|
|
link = substr (full, RSTART+3, RLENGTH-6);
|
|
fra2 = substr (full, RSTART+RLENGTH, length(full)-RLENGTH);
|
|
|
|
full = sprintf ("%s<i>%s</i>%s", fra1, link, fra2);
|
|
}
|
|
|
|
while (match (full, /##=[^#[:space:]]+=##/) > 0)
|
|
{
|
|
fra1 = substr (full, 1, RSTART-1);
|
|
link = substr (full, RSTART+3, RLENGTH-6);
|
|
fra2 = substr (full, RSTART+RLENGTH, length(full)-RLENGTH);
|
|
|
|
full = sprintf ("%s<b>%s</b>%s", fra1, link, fra2);
|
|
}
|
|
|
|
while (match (full, /##-[^#[:space:]]+-##/) > 0)
|
|
{
|
|
fra1 = substr (full, 1, RSTART-1);
|
|
link = substr (full, RSTART+3, RLENGTH-6);
|
|
fra2 = substr (full, RSTART+RLENGTH, length(full)-RLENGTH);
|
|
|
|
full = sprintf ("%s<strike>%s</strike>%s", fra1, link, fra2);
|
|
}
|
|
|
|
print full;
|
|
}
|
|
|
|
BEGIN {
|
|
header = 1;
|
|
mode = 0;
|
|
empty_line_count = 0;
|
|
para_started = 0;
|
|
|
|
tabs = "\\ \\ \\ \\ \\ \\ \\ \\ ";
|
|
|
|
#output=ARGV[1];
|
|
#gsub (/\.man/, ".html", output);
|
|
#print "OUTPUT TO: " output;
|
|
|
|
print "</html>";
|
|
print "</head>";
|
|
print "<meta http-equiv='content-type' content='text/html; charset=UTF-8'>";
|
|
print "<link href='doc.css' rel='stylesheet' type='text/css' />";
|
|
}
|
|
|
|
header && /^\.[[:alpha:]]+[[:space:]]/ {
|
|
if ($1 == ".title")
|
|
{
|
|
local i;
|
|
|
|
printf "<title>";
|
|
for (i = 2; i <= NF; i++) printf "%s ", $i;
|
|
print "</title>";
|
|
}
|
|
else if ($1 == ".tabstop")
|
|
{
|
|
if (NF >= 2)
|
|
{
|
|
local i;
|
|
for (i = 0; i < $2; i++) tabs = tabs . "\\ ";
|
|
}
|
|
}
|
|
}
|
|
|
|
header && !/^\.[[:alpha:]]+[[:space:]]/ {
|
|
|
|
header = 0;
|
|
print "</head>";
|
|
print "<body>";
|
|
}
|
|
|
|
!header {
|
|
local text;
|
|
|
|
if (mode == 0)
|
|
{
|
|
if (/^$/)
|
|
{
|
|
# empty line
|
|
if (para_started)
|
|
{
|
|
para_started = 0;
|
|
print "</p>";
|
|
}
|
|
empty_line_count++;
|
|
}
|
|
else
|
|
{
|
|
if (/^= [^=]+ =$/)
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
text=substr($0, 2, length($0)-2);
|
|
print "<h1>" . text . "</h1>";
|
|
}
|
|
else if (/^== [^=]+ ==$/)
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
text=substr($0, 3, length($0)-4);
|
|
print "<h2>" . text . "</h2>";
|
|
}
|
|
else if (/^=== [^=]+ ===$/)
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
text=substr($0, 4, length($0)-6);
|
|
print "<h3>" . text . "</h3>";
|
|
}
|
|
else if (/^==== [^=]+ ====$/)
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
text=substr($0, 5, length($0)-8);
|
|
print "<h4>" . text . "</h4>";
|
|
}
|
|
else if (/^\{\{\{$/) # {{{
|
|
{
|
|
# {{{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
print "<pre class='ase'>";
|
|
mode = 1;
|
|
}
|
|
else if (/^\[\[\[$/) # [[[
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
print "<ul>";
|
|
mode = 2;
|
|
list_count = 0;
|
|
}
|
|
else if (/^\(\(\($/) # (((
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
print "<ol>";
|
|
mode = 3;
|
|
list_count = 0;
|
|
}
|
|
else if (/^\{\{\|$/) # {{|
|
|
{
|
|
if (para_started)
|
|
{
|
|
print "</p>";
|
|
para_started = 0;
|
|
}
|
|
|
|
print "<table class='ase'>";
|
|
mode = 4;
|
|
table_row_count = 0;
|
|
|
|
print "<tr class='ase'>";
|
|
table_row_count++;
|
|
table_row_line_count = 0;
|
|
}
|
|
else
|
|
{
|
|
if (!para_started > 0)
|
|
{
|
|
print "<p>";
|
|
para_started = 1;
|
|
}
|
|
|
|
/*
|
|
gsub ("<", "\\<");
|
|
gsub (">", "\\>");
|
|
print $0;
|
|
*/
|
|
|
|
print_text ($0);
|
|
print "<br>";
|
|
}
|
|
|
|
empty_line_count = 0;
|
|
}
|
|
}
|
|
else if (mode == 1)
|
|
{
|
|
if (/^}}}$/)
|
|
{
|
|
# }}}
|
|
print "</pre>";
|
|
mode = 0;
|
|
}
|
|
else
|
|
{
|
|
gsub ("<", "\\<");
|
|
gsub (">", "\\>");
|
|
print $0;
|
|
}
|
|
}
|
|
else if (mode == 2)
|
|
{
|
|
if (/^]]]$/)
|
|
{
|
|
# ]]]
|
|
print "</li>";
|
|
print "</ul>";
|
|
mode = 0;
|
|
}
|
|
else if (/^\* [^[:space:]]+/)
|
|
{
|
|
gsub ("<", "\\<");
|
|
gsub (">", "\\>");
|
|
if (list_count > 0) print "</li>";
|
|
print "<li>";
|
|
|
|
print_text (substr ($0, 3, length($0)-2));
|
|
list_count++;
|
|
}
|
|
else
|
|
{
|
|
print_text ($0);
|
|
}
|
|
}
|
|
else if (mode == 3)
|
|
{
|
|
if (/^\)\)\)$/)
|
|
{
|
|
# )))
|
|
print "</li>";
|
|
print "</ol>";
|
|
mode = 0;
|
|
}
|
|
else if (/^\* [^[:space:]]+/)
|
|
{
|
|
gsub ("<", "\\<");
|
|
gsub (">", "\\>");
|
|
if (list_count > 0) print "</li>";
|
|
print "<li>";
|
|
|
|
print_text (substr ($0, 3, length($0)-2));
|
|
list_count++;
|
|
}
|
|
else
|
|
{
|
|
print_text ($0);
|
|
}
|
|
}
|
|
else if (mode == 4)
|
|
{
|
|
if (/^\|}}$/) # |}}
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
if (table_row_count > 0) print "</tr>";
|
|
print "</table>";
|
|
mode = 0;
|
|
}
|
|
else if (/^\|-+$/) # |-
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
if (table_row_count > 0) print "</tr>";
|
|
print "<tr class='ase'>";
|
|
table_row_count++;
|
|
table_row_line_count = 0;
|
|
}
|
|
else if (table_row_count == 1 && /^![[:space:]]*$/) # !
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
print "<th class='ase'>";
|
|
print " ";
|
|
table_in_th = 1;
|
|
table_row_line_count++;
|
|
}
|
|
else if (table_row_count == 1 && /^! .+/) # ! text
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
print "<th class='ase'>";
|
|
print_text (substr ($0, 3, length($0)-2));
|
|
table_in_th = 1;
|
|
table_row_line_count++;
|
|
}
|
|
else if (/^\|[[:space:]]*$/) # |
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
print "<td class='ase'>";
|
|
print " ";
|
|
table_in_th = 0;
|
|
table_row_line_count++;
|
|
}
|
|
else if (/^\| .+/) # | text
|
|
{
|
|
if (table_row_line_count > 0)
|
|
print ((table_in_th)? "</th>": "</td>");
|
|
print "<td class='ase'>";
|
|
|
|
print_text (substr ($0, 3, length($0)-2));
|
|
table_in_th = 0;
|
|
table_row_line_count++;
|
|
}
|
|
else
|
|
{
|
|
print "<br>";
|
|
print_text ($0);
|
|
table_row_line_count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
END {
|
|
print "</body>";
|
|
print "</html>";
|
|
}
|