diff options
author | Aaron Ball <nullspoon@iohq.net> | 2015-07-04 14:14:41 -0600 |
---|---|---|
committer | Aaron Ball <nullspoon@iohq.net> | 2015-07-17 08:58:46 -0600 |
commit | 1885394214392349a92eaa959e5f6acdffcd2ca2 (patch) | |
tree | 77772c8eba7ba2b30805c81827eef36d47157974 /src/Javadoc-style_Perl_Documentation_Generator.ascii | |
parent | 555db1fb0a22d9e0af9944504feb0ba5d759e926 (diff) | |
download | oper.io-1885394214392349a92eaa959e5f6acdffcd2ca2.tar.gz oper.io-1885394214392349a92eaa959e5f6acdffcd2ca2.tar.xz |
Restructured all posts
Diffstat (limited to 'src/Javadoc-style_Perl_Documentation_Generator.ascii')
-rw-r--r-- | src/Javadoc-style_Perl_Documentation_Generator.ascii | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/src/Javadoc-style_Perl_Documentation_Generator.ascii b/src/Javadoc-style_Perl_Documentation_Generator.ascii deleted file mode 100644 index 83d82c8..0000000 --- a/src/Javadoc-style_Perl_Documentation_Generator.ascii +++ /dev/null @@ -1,148 +0,0 @@ -Javadoc-style Perl Documentation Generator -========================================== -:author: Aaron Ball -:email: nullspoon@iohq.net - - -== {doctitle} - -I'm not a huge fan of Java, but I really do appreciate their standards for code -comments. I use them in my PHP, C+\+, and Perl code. There is obviously some -changing that needs to happen becuase those languages don't all comment the -same, but for the most part it works really well. - -Today I needed to write up a document on how one of my larger scripts/programs -worked. I wanted to include the script architecture, but didn't have a good way -to do it. Then I remembered something one of my favorite open source projects -does. MediaWiki is doing continuous integration and so they use (as I know -other OSS projects do) http://jenkins-ci.org/[Jenkins] to do post-commit -validation. Specifically relating to this post, they use the Jenkins scripts -to verify that the comments for each function are in the right format and -contain the right data types, etc. In application to my project at hand, in my -Perl scripts this would look something like... - ----- -# -# This subroutine does something cool -# -# @param $_[0] string This is a test parameter -# @param $_[1] array This is an array reference of mic checks -# -# @return bool Success or failure of this function's awesomeness -# ----- - -The commit validation scripts Jenkins uses would check if the subroutine -definition did in fact require two parameters and that the function returned -boolean. Granted, since Perl isn't strongly typed, this has to be a bit looser -than it would for other languages (C+\+, C#, etc), but you get the idea. This -documentation style is still awesome (at least, I think it is) - -What I needed today though was a script that parsed my other scripts, read in -all the subroutines (Perl, remember?), parsed out the comments for each one, -and returned HTML using inline styles so I could copy it into a Word (well, -LibreOffice Writer) doc without losing formatting. That said, here's the quick -and dirty. - -**Note**: Ironically, I just realized that this script isn't commented. - ----- -#!/usr/bin/env perl -use warnings; -use strict; - -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -if( scalar( @ARGV ) < 1 ) { - print "\nPlease specify a file to parse.\n\n"; - exit( 0 ); -} - -main( @ARGV ); - -sub main { - my $path = $_[0]; - # Open our file and do some science! - open FILE, $path or die $!; - my @lines = <FILE>; - close( FILE ); - my @subs; - my $body = ''; - for( my $i = 0; $i < scalar( @lines ); $i++ ) { - my $line = $lines[$i]; - # Remove leading spaces - $line =~ s/^[\t\s]+//; - # Remove multiple inner space - $line =~ s/[\t\s]+/ /; - if( $line =~ /^sub ([\d\w_-]+)[\s{]+$/ ) { - my $h2 = "<h2 style=\"margin:0px; padding:0px; display:inline; font-size:1.2em; color:#444;\">"; - $body .= '<br />' . $h2 . $1 . "()</h2>\n"; - # We've found one! - my $comments = ''; - # Now we go backwards, nabbing the comments as we go - for( my $n = $i - 1; $n > 0; $n-- ) { - if( $lines[$n] =~ /#[\w\d\s\t]*/ ) { - # Becase we're now reading backwards, - # we need to prepend - $comments = lineToHtml( $lines[$n] ) . $comments; - } else { - # Exit and continue - $n = 0; - } - } - my $pStyle = "<p style=\"display:block; background-color:#eee; margin:0px;"; - $pStyle .= "padding:5px; border:1px dashed #aaa; width:90%; font-size:9pt;\">"; - $comments = $pStyle . $comments . "</p>\n"; - $body .= $comments; - } - } - $body .= "\n\n"; - print bodyToHtml( $body ); - exit( 0 ); -} - -sub bodyToHtml { - my $body = $_[0]; - my $bodyHeader = '<!DOCTYPE html />'; - $bodyHeader .= '<html><head>'; - $bodyHeader .= '</head><body style="font-family:sans-serif;">'; - - my $bodyFooter = '</body></html>'; - return $bodyHeader . $body . $bodyFooter; -} - -sub lineToHtml { - my $line = $_[0]; - - my $formatted = $line; - $formatted =~ s/^[#\s\t]+//; - $formatted =~ s/\n+//; - if( $formatted =~ /^\@param/ ) { - $formatted =~ s/\@param/<strong>\@param<\/strong>/; - $formatted = '<br /><span style="display:block; color:#499;">' . $formatted . '</span>'; - } elsif( $formatted =~ /^\@return/ ) { - $formatted =~ s/\@return/<strong>\@return<\/strong>/; - $formatted = '<br /><span style="display:block; color:#494; margin-top:10px;">' . $formatted . '</span>'; - } - $formatted =~ s/ (int|hash|array|string|boolean|bool) / <span style="color:#949; font-style:italic;">$1<\/span> /i; - $formatted .= "\n"; - return $formatted; -} ----- - - - -// vim: set syntax=asciidoc: |