diff options
Diffstat (limited to 'apps/wman')
-rwxr-xr-x | apps/wman/app.rc | 89 | ||||
-rwxr-xr-x | apps/wman/man_page.tpl | 3 | ||||
-rwxr-xr-x | apps/wman/page_list.tpl | 11 | ||||
-rwxr-xr-x | apps/wman/search.tpl | 20 | ||||
-rwxr-xr-x | apps/wman/section_list.tpl | 11 |
5 files changed, 134 insertions, 0 deletions
diff --git a/apps/wman/app.rc b/apps/wman/app.rc new file mode 100755 index 0000000..8f0a150 --- /dev/null +++ b/apps/wman/app.rc @@ -0,0 +1,89 @@ +fn conf_enable_wman { + wman_tmac=an + wman_base_uri=$conf_wd + wman_man_path=$* + if(~ $#wman_man_path 0) + wman_man_path=$wman_base_uri + conf_enable_app wman +} + +wman_junk_filter='/(\/(INDEX|\.cvsignore|_.*)|\.9p|\.html)$/d; s!/man([0-9]+/[^/]+)$!/\1!; ' +fn wman_ls_pages { + ls $* \ + | sed $dirfilter^$wman_junk_filter^' s/\.([0-9]|9p)$//; s!/0intro$!/intro!' \ + | sort -u +} +fn wman_init { + ifs=$ifs^'/' { p=`{echo $req_path | sed 's!^'^$wman_base_uri^'!!'} } + wman_cat=$p(1) + wman_page=$p(2) + if(~ $#wman_unix_mode 1) { + wman_cp='man' + wman_pe=.^$"wman_cat + } + + if(! ~ $"wman_cat '') { + wman_cat_path=$wman_man_path^/^$"wman_cp^$p(1) + if(! ~ $"wman_page '') { + wman_page_file=$wman_page^$"wman_pe + # Hack to handle 0intro files. + if(~ $wman_page intro && test -f $wman_cat_path^/0^$"wman_page_file) + wman_page_file=0^$"wman_page_file + wman_page_file=$wman_cat_path^/^$"wman_page_file + x=`{echo $"req_path|sed 's%.*/([^/]+)/'$"wman_cat'/'^$"wman_page^'%\1%; s%_% %g'} + pageTitle=$wman_page' page from Section '$wman_cat' of the '^$"x' manual' + } + } + + wman_cat_list=`{ls -F $wman_man_path/*/ \ + | sed -e $wman_junk_filter -e 's!.*/([^/]+)/[^/]+$!\1!; /[0-9]+/!d' \ + | sort -un} + + synth_paths=($wman_base_uri$wman_cat_list'/') + + if(~ $req_path $wman_base_uri && ~ $"handler_body_main '') + handler_body_main=(tpl_handler apps/wman/section_list.tpl) + if not if(~ $req_path $wman_base_uri^*) { + #^*/[a-z0-9]*[a-z]* $wman_base_uri^*/*[a-z]*[a-z0-9] $wman_base_uri^*/[a-z]) + if(echo $req_path | grep -s '^'^$wman_base_uri^'/*[0-9]+/[0-9a-z\-\+\.]+$') + if(test -f $wman_page_file) # Check for 404 + handler_body_main=(tpl_handler apps/wman/man_page.tpl) + if not if(~ $req_path $wman_base_uri^*/) + handler_body_main=(tpl_handler apps/wman/page_list.tpl) + if not if(~ $p(2) [A-Z]* [0-9][A-Z]*) # Correct badly capitalized links + perm_redirect $wman_base_uri^$p(1)^/^`{echo $p(2) |tr 'A-Z' 'a-z'} + } + + # Search + ll_add handlers_body_head tpl_handler apps/wman/search.tpl + if(! ~ $"post_arg_wman_search '') { + s=`{echo $post_arg_wman_search | sed 's/[^a-zA-Z0-9\-\.]+//g; s/\.+/./g; 1q'} + ifs='' { wman_search_results=`{wman_ls_pages $wman_man_path/*/*^$"s^*} } + if(! ~ $"post_arg_go '' && ~ `{echo -n $wman_search_results|wc -l} 1) + post_redirect $wman_base_uri^`{echo $wman_search_results|awk -F/ '{print $(NF-1)"/"$NF}'} + } + +} + +fn wman_get_section_desc { + cat $wman_man_path/^$"wman_cp^$1/0intro* >[2]/dev/null| sed '1,2d; s!intro \\- [Ii]ntroduction to !!; 3q;' +} + +fn wman_page_gen { + #troff -manhtml $1| troff2html -t 'Plan 9 from User Space' + troff -N -m$wman_tmac $1 | wman_out_filter +} + +fn wman_out_filter { + wman_default_out_filter +} + +fn wman_default_out_filter { + # col -x syntax is the same for UNIX and Plan 9. + escape_html \ + | sed 's!([\.\-a-zA-Z0-9]+)\(('^`{echo $wman_cat_list|tr ' ' '|'}^')\)!<a href="../\2/\1">&</a>!g' \ + | awk '/^$/ {if(n != 1) print; n=1; next} /./ {n=0; print}' \ + | col -x +} + + diff --git a/apps/wman/man_page.tpl b/apps/wman/man_page.tpl new file mode 100755 index 0000000..945e23a --- /dev/null +++ b/apps/wman/man_page.tpl @@ -0,0 +1,3 @@ +<pre> +% wman_page_gen $wman_page_file +</pre> diff --git a/apps/wman/page_list.tpl b/apps/wman/page_list.tpl new file mode 100755 index 0000000..b98600d --- /dev/null +++ b/apps/wman/page_list.tpl @@ -0,0 +1,11 @@ +% d=`{wman_get_section_desc $wman_cat} +<h1>Manual pages - Section %($wman_cat%): %($"d%)</h1> + +<ul style="float:left"> +%{ +wman_ls_pages $wman_cat_path \ + | awk -F/ '{ print "<li><a href=\""$(NF)"\">"$(NF)"</a></li>" } + NR%20 == 0 { print "</ul><ul style=\"float: left\">" }' +%} +</ul> + diff --git a/apps/wman/search.tpl b/apps/wman/search.tpl new file mode 100755 index 0000000..a6c59e4 --- /dev/null +++ b/apps/wman/search.tpl @@ -0,0 +1,20 @@ +<form action="" method="POST"> +<fieldset> + <input type="text" name="wman_search" value="%($"s%)" /> + <input type="submit" name="go" value="Feel Lucky" /> + <input type="submit" value="Search" /> + +% if(! ~ $"post_arg_wman_search '') { +% if(~ $"wman_search_results '') { + No matches found for <i>'%($post_arg_wman_search%)'</i>. +% } +% if not { + <ul> +% echo $wman_search_results|awk -F/ '$(NF-1) ~ "^[0-9]+$" {printf "<li><a href=\"'$wman_base_uri'%s/%s\" />%s(%s)</a></li>", $(NF-1),$NF, $NF, $(NF-1)}' + </ul> +% } +% } + +</fieldset> +</form> + diff --git a/apps/wman/section_list.tpl b/apps/wman/section_list.tpl new file mode 100755 index 0000000..299d613 --- /dev/null +++ b/apps/wman/section_list.tpl @@ -0,0 +1,11 @@ +<h1>Manual Sections</h1> + +<ul style="text-transform: capitalize;"> +% for(c in $wman_cat_list) { + <li><a href="%($c%)/"><b>Section: %($c%)</b></a> +% wman_get_section_desc $c +% if(~ $status '' '|') +% echo '(<a href="'$c'/intro">intro</a>)' + </li> +% } +</ul> |