From f677d2717dd41d04a15f68036217042583ffe097 Mon Sep 17 00:00:00 2001 From: tpearson Date: Fri, 26 Feb 2010 19:11:44 +0000 Subject: Added kvirc-specific admin directory git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1096505 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- admin/gendoc.pl | 1351 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1351 insertions(+) create mode 100755 admin/gendoc.pl (limited to 'admin/gendoc.pl') diff --git a/admin/gendoc.pl b/admin/gendoc.pl new file mode 100755 index 00000000..700ed23f --- /dev/null +++ b/admin/gendoc.pl @@ -0,0 +1,1351 @@ +#!/usr/bin/perl + +################################################################################################# +# GLOBAL CONFIGS +################################################################################################# + +$g_currenttime=gmtime; +$g_currentuser = getlogin || getpwuid($<) || "Unknown"; +$g_notetablebgcolor="#F0F0F0"; +$g_notetextcolor="#909090"; +$g_syntaxcolor="#802000"; + +$g_kvssyntaxcolor="#802000"; +$g_kvstypenamecolor="#808080"; +$g_kvstypedelimiterscolor="#8080a0"; + +$g_bodybgcolor="#FFFFFF"; +$g_bodytextcolor="#000000"; +$g_bodylinkcolor="#000000"; +$g_tablebgcolor="#B4B4C8"; +#$g_titletablebgcolor="#999999"; +$g_titletextcolor="#31507B"; +#$g_titletablebgcolor="#68838B"; #LightBlue4 +$g_titletablebgcolor="#BEBEF0"; +#$g_subtitletablebgcolor="#C5C5C5"; +$g_subtitletablebgcolor="#D2D2D2"; +$g_internaltablecolor="#D5D5D5"; +$g_classfnctablecolor="#D5D5D5"; +$g_classfncbodytablecolor="#E0E0E0"; +$g_switchbodytablecolor="#D5D5D5"; +$g_switchnametablecolor="#E0E0E0"; +$g_bodytablebgcolor="#EAEAEA"; +$g_commentcolor="#207500"; +$g_fileextension=".html"; +#$g_headerborderlightcolor="#A0A0A0"; +#$g_headerborderdarkcolor="#000000"; +$g_headerbgcolor="#FFFFFF"; + + +$g_prefixes{'command'}="cmd"; +$g_prefixes{'function'}="fnc"; +$g_prefixes{'event'}="event"; +$g_prefixes{'language'}="doc"; +$g_prefixes{'class'}="class"; +$g_prefixes{'module'}="module"; +$g_prefixes{'widget'}="widget"; + +$g_version = "3.2.0.99"; +$g_filehandle=""; +$g_shortsIdx{"keyterms"}=0; +$g_directory = ""; + +################################################################################################# +# PARSE ARGS +################################################################################################# + + +sub usage +{ + print "\n"; + print "Usage:\n"; + print " gendoc.pl [-v ] ...\n"; + print "Parameters:\n"; + print " : directory where the doc files should be written\n"; + print " ...: a list of files from which to extract docs\n"; + print "Options:\n"; + print " -v forces the specified version to be displayed in the\n"; + print " generated documents\n"; + print "\n"; +} + +$i = 0; +$cont = 1; +while($cont) +{ + if($ARGV[$i] eq "--version") + { + print "gendoc.pl 2.0.0: KVIrc documentation generator\n"; + exit(0); + } elsif($ARGV[$i] eq "-v") + { + $i++; + if($ARGV[$i] eq "") + { + usage(); + die "Switch -v requires a parameter" + } + $g_version = $ARGV[$i]; + $i++; + } else { + $cont = 0; # stop processing + } +} + +$g_directory = $ARGV[$i]; +$i++; + +if($g_directory eq "") +{ + usage(); + die "Missing target directory"; +} + +$j = 0; +while($ARGV[$i] ne "") +{ + $g_filesToProcess[$j] = $ARGV[$i]; + $j++; + $i++; +} + + +################################################################################################# +# SUBS +################################################################################################# + +sub print_header +{ + print $g_filehandle "\n"; + print $g_filehandle "\n"; + print $g_filehandle "$_[0]\n"; + + print $g_filehandle "\n"; + print $g_filehandle "\n"; + print $g_filehandle "\n"; + print $g_filehandle "\n"; + + print $g_filehandle "\n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle "
\n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle "
\n"; +} + +sub print_footer +{ + print $g_filehandle "
KVIrc $g_version Documentation
Generated by $g_currentuser at $g_currenttime\n"; + print $g_filehandle "\n"; + print $g_filehandle "\n"; +} + +sub print_tablestart +{ + print $g_filehandle "\n"; + #print $g_filehandle "\n"; + print $g_filehandle "
\n"; +} + +sub print_tableend +{ + #print $g_filehandle "
\n"; +} + +sub print_title +{ + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + + print $g_filehandle "

$_[0]

\n"; + if($_[1] ne "") + { + print $g_filehandle "$_[1]\n"; + } else { + print $g_filehandle "\n"; + } + + print $g_filehandle "
\n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; +} + +sub print_twocolumntitle +{ + print $g_filehandle " \n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; + + print $g_filehandle "

$_[0]

\n"; + if($_[1] ne "") + { + print $g_filehandle "$_[1]\n"; + } else { + print $g_filehandle "\n"; + } + + print $g_filehandle "
\n"; + print $g_filehandle " \n"; + print $g_filehandle " \n"; +} + + +sub print_subtitle +{ + print $g_filehandle " \n"; + print $g_filehandle " $_[0]\n"; + print $g_filehandle " \n"; +} + +sub print_twocolumnsubtitle +{ + print $g_filehandle " \n"; + print $g_filehandle " $_[0]\n"; + print $g_filehandle " \n"; +} + +sub print_body +{ + print $g_filehandle " \n"; + print $g_filehandle " $_[0]\n"; + print $g_filehandle " \n"; +} + +sub print_twocolumnbody +{ + print $g_filehandle "\n"; + print $g_filehandle " $_[0]\n"; + print $g_filehandle " $_[1]\n"; + print $g_filehandle "\n"; +} + +sub print_entry +{ + if($_[1] ne "") + { + if($_[0] ne "") + { + print_subtitle($_[0]); + } + print_body($_[1]); + } +} + +sub make_single_token +{ + $_[0] =~ s/^[ ]*//g; + $_[0] =~ s/[ ]*$//g; + $_[0] =~ s/\n//g; +} + +sub make_single_line +{ + $_[0] =~ s/^[ \n]*//g; + $_[0] =~ s/[ \n]*$//gs; +} + +sub make_syntax +{ + $_[0] =~ s/^[ \n]*//g; + $_[0] =~ s/[ \n]*$//gs; + my @arry; + @arry = split('\n',$_[0]); + $_[0] = ""; + foreach(@arry) + { + $_ =~ s/^[ \n]*//g; + if($_ ne "") + { + if($_[0] ne "") + { + $_[0] = "$_[0]\n$_"; + } else { + $_[0] = "$_"; + } + } + } +} + +sub extract_keyterms +{ + my($docfilename); + my(%parts); + my($part); # Part title + my($partbody); + my($tabblock); + my($tmp); + my($type); + + if(!open(CPPFILE,"$_[0]")) + { + return; + } + # Process the entire file + + while() + { + if(/^[ ]*\@doc:[ a-z_]*/) + { + # Process a single document block + + $docfilename="$_"; + $docfilename=~ s/[ ]*//g; + $docfilename=~ s/\@doc://g; + $docfilename=~ s/\n//g; + $docfilename=~ s/\r//g; + $docfilename=~ s/([a-zA-Z_]*)/\L\1/g; + + undef %parts; + $part = ""; + + INNERLOOP: while() + { + + if(/^[ ]*\*\/[ ]*/) + { + # End of comment + if(($part ne "") && ($partbody ne "") && ($partbody ne "\n")) + { + # We have an entire part to store + $parts{$part}="$partbody"; + } + last INNERLOOP; + } else { + # Inside a part + if(/^[ ]*\@[a-z]*:[ ]*/) + { + # A part title + if(($part ne "") && ($partbody ne "") && ($partbody ne "\n")) + { + # We have an entire part to store + $parts{$part}="$partbody"; + } + # Start of the part + # Extract the title + $part="$_"; + $part=~ s/[ ]*//g; + $part=~ s/\@//g; + $part=~ s/://g; + $part=~ s/\n//g; + # Clear the body (begin) + $partbody=""; + } else { + # Somewhere in a part body + if(($_ ne "") && ($_ ne "\n")) + { + if($partbody eq "") + { + # If it is the first line of the part body + # Extract the amount of tabs that the part has + # We will use it to remove the C++ indentation + $tabblock = "$_"; + $tabblock =~ s/^([ ]*).*/\1/g; + $tabblock =~ s/\n//g; + } + + if($tabblock ne "") + { + # If we have the initial tabblock , remove it from the line (remove indentation) + $_ =~ s/^$tabblock//g; + } + + process_body_line($_); + + $partbody="$partbody$_"; + } + } + } + } + + # Ok...we have a document in $parts + make_single_line($parts{'short'}); + make_single_token($parts{'title'}); + make_single_token($parts{'type'}); + + $parts{'type'}=~ s/\@//g; + $parts{'type'}=~ s/://g; + + if($parts{'type'} eq "") + { + $parts{'type'}="generic"; + } + + $type = $parts{'type'}; + + $tmp = $g_prefixes{$type}; + if($tmp eq "") + { + $tmp="doc"; + } + + $docfilename="$tmp\_$docfilename"; + + $zzz="keyterms"; + + if($parts{'keyterms'} ne "") + { + $keyterms = $parts{'keyterms'}; + $keyterms =~ s/\n//gs; + + for $term (split(/,/,$keyterms)) + { + make_single_token($term); + if($term ne "") + { + $termx=$term; + $termx=~ s/([\+\(\)\?\.\:\*\|\=\;\^\!\~])/\\$1/g; + + $g_keyterms{$term} = "$docfilename$g_fileextension"; + $g_keytermsclean{$term} = "$termx"; + + $tmp="keyterms_$g_shortsIdx{$zzz}"; + $g_shorts{$tmp}="$term$parts{'short'}$docfilename$g_fileextension"; + #print "GOT $g_shorts{$tmp} ($tmp)"; + $g_shortsIdx{$zzz}++; + } + } + } + + $tmp="keyterms_$g_shortsIdx{$zzz}"; + $g_shorts{$tmp}="$parts{'title'}$parts{'short'}$docfilename$g_fileextension"; + #print "GOT $g_shorts{$tmp} ($tmp)"; + $g_shortsIdx{$zzz}++; + } + } + + close(CPPFILE); +} + + + +sub substitute_keyterms +{ + my(@lines); + my(@tmp); + my($left); + my($right); + my($line); + my($term); + + # Kinda complex keyword substitution routine + + + # For each keyterm we have + for $term (@g_keytermsSorted) + { + # If the doc we're scanning isn't the keyword target + if($_[1] ne $g_keyterms{$term}) + { + $termclean=$g_keytermsclean{$term}; + + # If the doc matches the keyterm at least once + if($_[0] =~ /$termclean/) + { + $ref=$g_keyterms{$term}; + $ref =~ s/([a-zA-Z_]*)/\L\1/g; + + @tmp = split(//) + { + $skipIt=0 if /^[ ]*\/a[ ]*>/; + } + } + + if($skipIt) + { + $_[0]="$_[0]<$_"; + } else { + if(/[A-Za-z0-9\"]>/) + { + if(/^[ ]*a[ ][ ]*h/) + { + $skipIt=1; + $first ? $_[0] .= $_ : $_[0] .= "<$_"; + } else { + ($left,$right) = split(/>/,$_); + $right=~s/([^A-Za-z0-9<>\+\-\=_])($termclean)([^A-Za-z0-9<>\+\-\=_])/$1$2<\/a>$3/ig; + $_[0] .= "<$left>$right"; + } + } else { + $_=~s/([^A-Za-z0-9<>\+\-\=_\.])($termclean)([^A-Za-z0-9<>\+\-\=_\.])/$1$2<\/a>$3/ig; + $_[0] .= $_; + } + $first=0; + } + } + } + } + } +} + + +sub build_usage_from_kvs_syntax_line +{ + $_[0] =~ s/\<\;([A-Za-z0-9_]+):([A-Za-z0-9_]+)\>\;/\<\;\1\>\;/g; + $_[0] =~ s/\[([A-Za-z0-9_]+):([A-Za-z0-9_]+)\]/\[;\1\]/g; + $_[0] =~ s/^\<\;([A-Za-z0-9_]+)\>\;//g; +} + +sub build_usage_from_kvs_syntax +{ + my @arry; + @arry = split('\n',$_[0]); + $tmp = ""; + foreach(@arry) + { + build_usage_from_kvs_syntax_line($_); + if($tmp ne "") + { + $tmp = "$tmp\n$_"; + } else { + $tmp = "$_"; + } + } + return $tmp; +} + +sub process_kvs_syntax_line +{ + $_[0] =~ s/\<\;([A-Za-z0-9_]+):([A-Za-z0-9_]+)\>\;/\<\;\1\:\2\<\/font\>\>\;/g; + $_[0] =~ s/\[([A-Za-z0-9_]+):([A-Za-z0-9_]+)\]/\[\1\:\2\<\/font\>\]/g; + $_[0] =~ s/^\<\;([A-Za-z0-9_]+)\>\;/\<\;\\1\<\/font\>\>\;/g; + $_[0] =~ s/^([A-Za-z0-9_\.]+)/\\1\<\/b\>/g; + $_[0] =~ s/(\$[A-Za-z0-9_\.]*)/\\1\<\/b\>/g; + $_[0] =~ s/\(/\\(<\/b\>/g; + $_[0] =~ s/\)/\\)<\/b\>/g; + $_[0] =~ s/\<\;/\\<\;\<\/font\>/g; + $_[0] =~ s/\>\;/\\>\;\<\/font\>/g; + $_[0] =~ s/\[/\\[\<\/font\>/g; + $_[0] =~ s/\]/\\]\<\/font\>/g; +} + +sub process_kvs_syntax +{ + my @arry; + @arry = split('\n',$_[0]); + $_[0] = ""; + foreach(@arry) + { + process_kvs_syntax_line($_); + if($_[0] ne "") + { + $_[0] = "$_[0]\n$_"; + } else { + $_[0] = "$_"; + } + } +} + + + + +sub process_body_line +{ + $_[0] =~ s/ /\ \;\ \;\ \;\ \;/g; + $_[0] =~ s/\/\>\;/g; + $_[0] =~ s/\[br\]/\/g; + $_[0] =~ s/\[b\]/\/g; + $_[0] =~ s/\[p\]/\/g; + $_[0] =~ s/\[\/p\]/\<\/p\>/g; + $_[0] =~ s/\[\/b\]/\<\/b\>/g; + # [big][/big] is an alias to [title][/title] + $_[0] =~ s/\[big\]/\<\/td\>\<\/tr\>\\\
/g; + $_[0] =~ s/\[\/big\]/\<\/div\>\<\/td\>\<\/tr\>\\/g; +# $_[0] =~ s/\[title\]/\<\/td\>\<\/tr\>\\\
/g; +# $_[0] =~ s/\[\/title\]/\<\/div\>\<\/td\>\<\/tr\>\\/g; + $_[0] =~ s/\[title\]/\<\/td\>\<\/tr\>\\\
/g; + $_[0] =~ s/\[\/title\]/\<\/div\>\<\/td\>\<\/tr\>\\/g; +# $_[0] =~ s/\[title\]/\\\\
\\\
/g; +# $_[0] =~ s/\[\/title\]/\<\/div\>\<\/td\>\<\/tr\>\<\/table\>\<\/td\>\<\/tr\>\<\/table\>/g; + $_[0] =~ s/\[subtitle\]/\<\/td\>\<\/tr\>\\
\
/g; + $_[0] =~ s/\[\/subtitle\]/\<\/div\>\<\/td\>\<\/tr\>\\
/g; +# $_[0] =~ s/\[subtitle\]/\\\\
\\\
/g; +# $_[0] =~ s/\[\/subtitle\]/\<\/div\>\<\/td\>\<\/tr\>\<\/table\>\<\/td\>\<\/tr\>\<\/table\>/g; + $_[0] =~ s/\[pre\]/\/g; + $_[0] =~ s/\[\/pre\]/\<\/pre\>/g; + $_[0] =~ s/\[center\]/\/g; + $_[0] =~ s/\[\/center\]/\<\/center\>/g; + $_[0] =~ s/\[i\]/\/g; + $_[0] =~ s/\[\/i\]/\<\/i\>/g; + $_[0] =~ s/\[ul\]/\/g; + $_[0] =~ s/\[\/ul\]/\<\/ul\>/g; + $_[0] =~ s/\[li\]/\/g; + $_[0] =~ s/\[\/li\]/\<\/li\>/g; + $_[0] =~ s/\[table\]/\
/g; + $_[0] =~ s/\[\/table\]/\<\/table\>/g; + $_[0] =~ s/\[tr\]/\/g; + $_[0] =~ s/\[\/tr\]/\<\/tr\>/g; + $_[0] =~ s/\[td\]/\/g; + $_[0] =~ s/\[\/td\]/\<\/td\>/g; +# $_[0] =~ s/\[example\][ \n]*/

\\\\\/g; +# $_[0] =~ s/\[\/example\]/<\/font><\/code><\/pre><\/td><\/tr><\/table><\/td><\/tr><\/table><\/p>/g; + $_[0] =~ s/\[example\][ \n]*/

\\
\\\/g; + $_[0] =~ s/\[\/example\]/<\/font><\/code><\/pre><\/td><\/tr><\/table><\/p>/g; + $_[0] =~ s/\[comment\]/\/g; + $_[0] =~ s/\[\/comment\]/\<\/font\>/g; + $_[0] =~ s/\[doc\]([a-zA-Z0-9_]*)\[\/doc\]/\\1\<\/a\>/g; + $_[0] =~ s/\[doc:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_\-\&\;\. ]*)\[\/doc\]/\\2\<\/a\>/g; + $_[0] =~ s/\[cmd\]([a-zA-Z0-9_\.]*)\[\/cmd\]/\\1\<\/a\>/g; + $_[0] =~ s/\[cmd:([a-zA-Z0-9_\.]*)\]([a-zA-Z0-9_\-\&\;\. ]*)\[\/cmd\]/\\2\<\/a\>/g; + $_[0] =~ s/\[fnc\]\$([a-zA-Z0-9_\.]*)\[\/fnc\]/\\$\1\<\/a\>/g; + $_[0] =~ s/\[fnc\]\$([a-zA-Z0-9_\.]*)\(\)\[\/fnc\]/\\$\1()\<\/a\>/g; + $_[0] =~ s/\[fnc\]([a-zA-Z0-9_\.]*)\[\/fnc\]/\\$\1\<\/a\>/g; + $_[0] =~ s/\[fnc:\$([a-zA-Z0-9_\.]*)\]\$([a-zA-Z0-9_\-\&\;\. ]*)\[\/fnc\]/\\$\2\<\/a\>/g; + $_[0] =~ s/\[event\]\$([a-zA-Z0-9_]*)\[\/event\]/\\$\1\<\/a\>/g; + $_[0] =~ s/\[event:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_]*)\[\/event\]/\\2\<\/a\>/g; + $_[0] =~ s/\[class\]([a-zA-Z0-9_]*)\[\/class\]/\\1\<\/a\>/g; + $_[0] =~ s/\[class:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_ ]*)\[\/class\]/\\2\<\/a\>/g; + $_[0] =~ s/\[module:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_ ]*)\[\/module\]/\\2\<\/a\>/g; + $_[0] =~ s/\[widget:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_ ]*)\[\/widget\]/\\2\<\/a\>/g; + $_[0] =~ s/\[classfnc:([a-zA-Z0-9_]*)\]\$([a-zA-Z0-9_]*)\[\/classfnc\]/\\$\2\<\/a\>/g; + $_[0] =~ s/\[classfnc\]\$([a-zA-Z0-9_]*)\[\/classfnc\]/\\$\1\<\/a\>/g; + $_[0] =~ s/\[classsignal:([a-zA-Z0-9_]*)\]([a-zA-Z0-9_]*)\[\/classsignal\]/\\2\<\/a\>/g; + $_[0] =~ s/\[classsignal\]([a-zA-Z0-9_]*)\[\/classsignal\]/\\1\<\/a\>/g; + $_[0] =~ s/\[anchorlink:([a-zA-Z0-9_]*)\]/\/g; + $_[0] =~ s/\[\/anchorlink\]/\<\/a\>/g; + $_[0] =~ s/\[anchor:([a-zA-Z0-9_]*)\]/\/g; + $_[0] =~ s/\[\/anchor\]/\<\/a\>/g; + $_[0] =~ s/\[note\][ \n]*/

\\\\/g; + $_[0] =~ s/\[\/note\]/\<\/font\>\<\/td\>\<\/tr\>\<\/table\><\/p>/g; +} + +sub process_file +{ + my($docfilename); + my(%parts); + my($part); # Part title + my($partbody); + my($tabblock); + my($tmp); + my($type); + + + if(!open(CPPFILE,"$_[0]")) + { + return; + } + # Process the entire file + + while() + { + if(/^[ ]*\@doc:[ a-z_]*/) + { + # Process a single document block + + $docfilename="$_"; + $docfilename=~ s/[ ]*//g; + $docfilename=~ s/\@doc://g; + $docfilename=~ s/\n//g; + $docfilename=~ s/([a-zA-Z_]*)/\L\1/g; + + undef %parts; + $part = ""; + + INNERLOOP: while() + { + + if(/^[ ]*\*\/[ ]*/) + { + # End of comment + if(($part ne "") && ($partbody ne "") && ($partbody ne "\n")) + { + # We have an entire part to store + $parts{$part}="$partbody"; + } + last INNERLOOP; + } else { + # Inside a part + if(/^[ ]*\@[a-z]*:[ ]*/) + { + # A part title + if(($part ne "") && ($partbody ne "") && ($partbody ne "\n")) + { + # We have an entire part to store + $parts{$part}="$partbody"; + } + # Start of the part + # Extract the title + $part="$_"; + $part=~ s/[ ]*//g; + $part=~ s/\@//g; + $part=~ s/://g; + $part=~ s/\n//g; + # Clear the body (begin) + $partbody=""; + } else { + # Somewhere in a part body + if(($_ ne "") && ($_ ne "\n")) + { + if($partbody eq "") + { + # If it is the first line of the part body + # Extract the amount of tabs that the part has + # We will use it to remove the C++ indentation + $tabblock = "$_"; + $tabblock =~ s/^([ ]*).*/\1/g; + $tabblock =~ s/\n//g; + } + + if($tabblock ne "") + { + # If we have the initial tabblock , remove it from the line (remove indentation) + $_ =~ s/^$tabblock//g; + } + + process_body_line($_); + + $partbody="$partbody$_"; + } + } + } + } + + # Ok...we have a document in $parts + + # Process the title + if($parts{'title'} eq "") + { + print "Warning: no title specified for $docfilename\n"; + $parts{'title'}="No title specified"; + } + + make_single_token($parts{'title'}); + if($parts{'syntax'} ne "") + { + if($parts{'usage'} eq "") + { + $parts{'usage'} = build_usage_from_kvs_syntax($parts{'syntax'}) + } + } + make_syntax($parts{'usage'}); + make_syntax($parts{'syntax'}); + make_single_line($parts{'parameters'}); + make_single_line($parts{'inherits'}); + make_single_token($parts{'short'}); + make_single_token($parts{'window'}); + make_single_token($parts{'type'}); + + $parts{'type'}=~ s/\@//g; + $parts{'type'}=~ s/://g; + + if($parts{'type'} eq "") + { + $parts{'type'}="generic"; + } + + $type = $parts{'type'}; + + $tmp = $g_prefixes{$type}; + if($tmp eq "") + { + $tmp="doc"; + } + $docfilename="$tmp\_$docfilename"; + + if($g_shortsIdx{$type} eq "") + { + $g_shortsIdx{$type} = 0; + } + + $tmp="$type\_$g_shortsIdx{$type}"; + $g_shorts{$tmp}="$parts{'title'}$parts{'short'}$docfilename$g_fileextension"; + #print "$tmp, $g_shorts{$tmp}\n"; + $g_shortsIdx{$type}++; + + if($parts{'body'} ne "") + { + substitute_keyterms($parts{'body'},"$docfilename$g_fileextension"); + } + if($parts{'description'} ne "") + { + substitute_keyterms($parts{'description'},"$docfilename$g_fileextension"); + } + if($parts{'switches'} ne "") + { + substitute_keyterms($parts{'switches'},"$docfilename$g_fileextension"); + } + if(open(DOCFILE,">$g_directory/$docfilename$g_fileextension")) + { + $g_filehandle=DOCFILE; + + print_header($parts{'title'}); + print_tablestart(); + + print_title($parts{'title'},$parts{'short'}); + if($parts{'usage'} ne "") + { + print_entry("Usage","
$parts{'usage'}
"); + } + if($parts{'parameters'} ne "") + { + print_entry("Parameters","
$parts{'parameters'}
"); + } + + print_entry("Inherits","$parts{'inherits'}"); + print_entry("Window","$parts{'window'}"); + print_entry("","$parts{'body'}"); + print_entry("Description","$parts{'description'}"); + + if($parts{'switches'} ne "") + { + print_subtitle("Switches"); + + print DOCFILE "
\n"; + print DOCFILE " \n"; + print DOCFILE " \n"; + } + + + if($parts{'functions'} ne "") + { + print_subtitle("Functions"); + + print DOCFILE " \n"; + print DOCFILE " \n"; + print DOCFILE " \n"; + } + + if($parts{'signals'} ne "") + { + print_subtitle("Signals"); + + print DOCFILE " \n"; + print DOCFILE " \n"; + print DOCFILE " \n"; + } + + if($parts{'syntax'} ne "") + { + process_kvs_syntax($parts{'syntax'}); + print_entry("Syntax Specification","
$parts{'syntax'}
"); + } + + print_entry("Examples","$parts{'examples'}"); + print_entry("See also","$parts{'seealso'}"); + print_tableend(); + + + if($parts{'type'} eq "command") + { + print DOCFILE "
Index, Commands\n"; + } elsif($parts{'type'} eq "function") + { + print DOCFILE "
Index, Functions\n"; + } elsif($parts{'type'} eq "event") + { + print DOCFILE "
Index, Events\n"; + } elsif($parts{'type'} eq "generic") + { + print DOCFILE "
Index, Miscellaneous\n"; + } elsif($parts{'type'} eq "language") + { + print DOCFILE "
Index, Language Overview\n"; + } elsif($parts{'type'} eq "class") + { + print DOCFILE "
Index, Object Classes\n"; + } elsif($parts{'type'} eq "module") + { + print DOCFILE "
Index, Modules\n"; + } elsif($parts{'type'} eq "widget") + { + print DOCFILE "
Index, Features\n"; + } + + print_footer(DOCFILE); + + close(DOCFILE); + } else { print "Can't open $g_directory/$docfilename$g_fileextension for writing\n"; } + } + } + + close(CPPFILE); +} + + +################################################################################################# +# COMMAND/FUNCTION.... INDEXES +################################################################################################# + +sub generate_indexes +{ + my(@oldCommands); + my(@commands); + my(@sortedCommands); + my(@chars); + my($alllinks); + my($upcase); + my($count); + + my($doctitle); + my($category); + my($number); + + $doctitle = $_[0]; + $category = $_[1]; + $number = $_[2]; + + #print("Generating indexes for $doctitle $category $number\n"); + + ###################################################### + # generate some helper stuff (alphabetic index links) + + @chars=("\$","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); + + $i = 0; + + $alllinks="
\n"; + print DOCFILE " \n"; + + @lines = split("\n","$parts{'switches'}"); + $swbody = ""; + for(@lines) + { + if(/!sw:.*/) + { + if("$swbody" ne "") + { + print DOCFILE "\n"; + $swbody = ""; + } + $_ =~ s/!sw:[ ]*//g; + $_ =~ s/^[ ]*//g; + $_ =~ s/\n//gs; + $tmp = $_; + $tmp =~ s/\(.*\)//g; + $tmp =~ s/\$//g; + print DOCFILE "\n"; + } else { + if($swbody ne "") + { + $swbody="$swbody $_"; + } else { + $swbody="$_"; + } + } + + } + if("$swbody" ne "") + { + print DOCFILE "\n"; + } + + print DOCFILE "
$swbody
$_
$swbody
\n"; + print DOCFILE "
\n"; + print DOCFILE " \n"; + + @lines = split("\n","$parts{'functions'}"); + $fncbody = ""; + for(@lines) + { + if(/!fn:.*/) + { + if("$fncbody" ne "") + { + print DOCFILE "\n"; + $fncbody = ""; + } + $_ =~ s/!fn:[ ]*//g; + $_ =~ s/^[ ]*//g; + $_ =~ s/\n//gs; + $tmp = $_; + $tmp =~ s/\(.*\)//g; + $tmp =~ s/\$//g; + print DOCFILE "\n"; + } else { + if($fncbody ne "") + { + $fncbody="$fncbody $_"; + } else { + $fncbody="$_"; + } + } + + } + if("$fncbody" ne "") + { + print DOCFILE "\n"; + } + + print DOCFILE "
$fncbody
$_
$fncbody
\n"; + print DOCFILE "
\n"; + print DOCFILE " \n"; + + @lines = split("\n","$parts{'signals'}"); + $sigbody = ""; + for(@lines) + { + if(/!sg:.*/) + { + if("$sigbody" ne "") + { + print DOCFILE "\n"; + $sigbody = ""; + } + $_ =~ s/!sg:[ ]*//g; + $_ =~ s/^[ ]*//g; + $_ =~ s/\n//gs; + $tmp = $_; + $tmp =~ s/\(.*\)//g; + $tmp =~ s/\$//g; + print DOCFILE "\n"; + } else { + if($sigbody ne "") + { + $sigbody="$sigbody $_"; + } else { + $sigbody="$_"; + } + } + + } + if("$sigbody" ne "") + { + print DOCFILE "\n"; + } + + print DOCFILE "
$sigbody
$_
$sigbody
\n"; + print DOCFILE "
"; + + for(@chars) + { + $alllinks = "$alllinks \n"; + $i++; + if($i > 13) + { + $i = 0; + $alllinks = "$alllinks\n"; + } + } + + $alllinks ="$alllinks
$_
All
"; + + ##################################### + # Simple plain long index + + $i=0; + + undef %terms; + + while($i < $g_shortsIdx{$category}) + { + $tmp="$category\_$i"; + ($cmd,$short,$link) = split("",$g_shorts{$tmp}); + $terms{$cmd} = "1"; + $commands[$i]=$g_shorts{$tmp}; + $commands[$i] =~ s/\n//g; + $i++; + } + + ##################################### + # Load the other terms from the db (if there) + # Make sure that we do not overwrite the current entries + if(open(OLDDB,"$g_directory/_db_$category.idx")) + { + while() + { + $_ =~ s/\n//g; + if($_ ne "") + { + ($cmd,$short,$link) = split("",$_); + if($terms{$cmd} ne "1") + { + $terms{$cmd} = "1"; + $commands[$i]=$_; + $i++; + } + } + } + close(OLDDB); + } + + $count = $i; + + + ##################################### + # Re-dump them + if(open(OLDDB,"> $g_directory/_db_$category.idx")) + { + $i = 0; + while($i < $count) + { + print OLDDB "$commands[$i]\n"; + $i++; + } + close(OLDDB); + } + + @sortedCommands = sort @commands; + + if(open(CMDINDEX,">$g_directory/doc_$category\_index_all$g_fileextension")) + { + $g_filehandle=CMDINDEX; + + print_header("$doctitle: All"); + print_tablestart(); + print_title("$doctitle: All",""); + print_tableend(); + + print_tablestart(); + print_body($alllinks); + print_tableend(); + + print_tablestart(); + + $i=0; + + while($i < $count) + { + ($cmd,$short,$link) = split("",$sortedCommands[$i]); + $link =~ s/([a-zA-Z_]*)/\L\1/g; + print_twocolumnbody("$cmd",$short); + $i++; + } + + print_tableend(); + + print_tablestart(); + print_body($alllinks); + print_tableend(); + + print_footer(); + + close(CMDINDEX); + } else { + print "Can't open $g_directory/doc_$category\_index_all$g_fileextension for writing\n"; + } + + + ####################### + # Alphabetic + + for(@chars) + { + if(open(CMDINDEX,">$g_directory/doc_$category\_alphabetic_$_$g_fileextension")) + { + + $upcase=$_; + $upcase=~ tr/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; + + + $g_filehandle=CMDINDEX; + + print_header("$doctitle: $_"); + print_tablestart(); + print_title("$doctitle: $_",""); + print_tableend(); + + print_tablestart(); + print_body($alllinks); + print_tableend(); + + print_tablestart(); + + $i=0; + $j=0; + if($number > 0) + { + #print("NUMBER > 0,COUNT = $count\n"); + while($i < $count) + { + ($cmd,$short,$link) = split("",$sortedCommands[$i]); + #$left=substr($cmd,0,$number); + #$right=$cmd; + #$right=~ s/^$left//; + $left = substr($cmd,0,$number); + $right = substr($cmd,$number); + $link =~ s/([a-zA-Z_]*)/\L\1/g; + + + #print("RIGHT=$right,_=$_,LEFT=$left,UPCASE=$upcase\n"); + + if(($right =~ /^$_/) or ($right =~ /^$upcase/) or ($right eq $_)) + { + $j++; + print_twocolumnbody("$left$right",$short); + } + $i++; + } + + } else { + #print("NUMBER == 0,COUNT = $count\n"); + while($i < $count) + { + ($cmd,$short,$link) = split("",$sortedCommands[$i]); + $link =~ s/([a-zA-Z_]*)/\L\1/g; + if(($cmd =~ /^$_/) || ($cmd =~ /^$upcase/)) + { + $j++; + print_twocolumnbody("$cmd",$short); + } + $i++; + } + } + + if($j == 0) + { + print_body("No matches"); + } + + print_tableend(); + + print_tablestart(); + print_body($alllinks); + print_tableend(); + + print_footer(); + + close(CMDINDEX); + } else { + print "Can't open $g_directory/doc_$category\_alphabetic_$_$g_fileextension for writing\n"; + } + } +} + +################################################################################################# +# MAIN +################################################################################################# + +# Force flusing of STDOUT +$|=1; + +print "*\n"; +print "* Generating documentation, this may take a while :)\n"; +print "*\n"; +print "* Extracting keyterms\n"; +# Extract the keywords to generate the crossreferences +$i = 0; + +while($g_filesToProcess[$i] ne "") +{ + print "."; + extract_keyterms($g_filesToProcess[$i]); + $i++; +} + +$g_files=$i - 1; + +print "\n"; +print "* Extracting documents and generating crossreferences\n"; + +# Sort them +@g_keytermsSorted = sort {length($b) <=> length($a)} keys(%g_keyterms); + +# Process the files now +$i = 0; + +while($g_filesToProcess[$i] ne "") +{ + print "."; + process_file($g_filesToProcess[$i]); + $i++; +} + +print "\n"; +print "* Generating indexes\n"; + +print "."; +generate_indexes("Commands","command",0); +print "."; +generate_indexes("Functions","function",1); +print "."; +generate_indexes("Modules","module",0); +print "."; +generate_indexes("Classes","class",0); +print "."; +generate_indexes("Events","event",2); +print "."; +generate_indexes("Language Documentation","language",0); +print "."; +generate_indexes("Features","widget",0); +print "."; +generate_indexes("Misc. Documentation","generic",0); +print "."; +generate_indexes("Keyterms & Concepts","keyterms",0); +print "."; + +if(open(DOCINDEX,">$g_directory/index$g_fileextension")) +{ + $g_filehandle=DOCINDEX; + print_header("Documentation Index"); + print_tablestart(); + print_twocolumntitle("Index",""); + print_twocolumnsubtitle("Fundamentals"); + print_twocolumnbody("Introduction to IRC","A \"must read\" for beginners"); + print_twocolumnbody("Introduction to KVIrc","A couple of words about KVIrc"); + + print_twocolumnsubtitle("Scripting Concepts: The KVS Manual"); + print_twocolumnbody("Introduction to KVS","Introduction to the KVIrc Scripting Language"); + print_twocolumnbody("Basic KVS Concepts","The first steps in the KVS world"); + print_twocolumnbody("Aliases and Functions","How to write aliases/functions"); + print_twocolumnbody("Variables","Which types of variables are available and how to handle them"); + print_twocolumnbody("Operators","Describes simple operations with variables"); + print_twocolumnbody("Events","How to handle network events in KVS ?"); + print_twocolumnbody("Objects","Object oriented scripting"); + print_twocolumnbody("Addons","How to write nice addons for KVIrc"); + print_twocolumnbody("Coding Tips","Some tips that may help you"); + print_twocolumnbody("All the language documents","All the documents related to KVS"); + + print_twocolumnsubtitle("Scripting Reference"); + print_twocolumnbody("Commands","The listing of available commands"); + print_twocolumnbody("Functions","The listing of available functions"); + print_twocolumnbody("Events","The listing of available events"); + print_twocolumnbody("Object Classes","The listing of available object classes"); + print_twocolumnsubtitle("Other Documents"); + print_twocolumnbody("Keyboard shortcuts","Map of the global keyboard shortcuts"); + print_twocolumnbody("Modules","Documentation related to specific modules"); + print_twocolumnbody("Features"," "); + print_twocolumnbody("Miscellaneous","Misc documentation that didn't find any other place"); + print_twocolumnbody("Keyterms","The (long) listing of all the keyterms"); + print_tableend(); + print_footer(); + + close(DOCINDEX); +} else { + print "Can't open $g_directory/index$g_fileextension for writing\n"; +} + +if(open(NOHELP,">$g_directory/nohelpavailable$g_fileextension")) +{ + $g_filehandle=NOHELP; + print_header("No help available"); + + print_tablestart(); + print_title("No help available",""); + print_tableend(); + + print $g_filehandle "

Sorry :(
Unfortunately there is no documentation related to the item you have selected


\n"; + print $g_filehandle "Please try a different search term or take a look at the documentation index "; + print $g_filehandle "and try to locate the topic manually.


"; + print_footer(); + close(NOHELP); +} else { + printf "Can't open $g_directory/nohelpavailable$g_fileextension for writing\n"; +} + +print "\n"; +print "*\n"; +print "* Done! (Processed $g_files files)\n"; +print "*\n"; -- cgit v1.2.1