diff options
Diffstat (limited to 'doc/lua_api.pl')
-rwxr-xr-x | doc/lua_api.pl | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/doc/lua_api.pl b/doc/lua_api.pl deleted file mode 100755 index e4225b40a..000000000 --- a/doc/lua_api.pl +++ /dev/null @@ -1,274 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use Data::Dumper; -use Digest::MD5 qw(md5_hex); - -use constant { - STATE_READ_SKIP => 0, - STATE_READ_CONTENT => 1, -}; - -my $state = STATE_READ_SKIP; -my $content; -my %modules = (); -my $cur_module; - -sub print_module_markdown { - my ( $mname, $m ) = @_; - - print <<EOD; -## Module `$mname` {#$m->{'id'}} - -$m->{'data'} -EOD - if ( $m->{'example'} ) { - print <<EOD; - -Example: - -~~~lua -$m->{'example'} -~~~ -EOD - } - - sub print_func { - my ($f) = @_; - - my $name = $f->{'name'}; - my $id = $f->{'id'}; - print "> [`$name`](#$id)\n\n"; - } - - print "\n###Brief content:\n\n"; - print "**Functions**:\n\n"; - foreach ( @{ $m->{'functions'} } ) { - print_func($_); - } - print "\n\n**Methods**:\n\n"; - foreach ( @{ $m->{'methods'} } ) { - print_func($_); - } -} - -sub print_function_markdown { - my ( $type, $fname, $f ) = @_; - - print <<EOD; -### $type `$fname` {#$f->{'id'}} - -$f->{'data'} -EOD - print "\n**Parameters:**\n\n"; - if ( $f->{'params'} && scalar @{ $f->{'params'} } > 0 ) { - foreach ( @{ $f->{'params'} } ) { - if ( $_->{'type'} ) { - print - "- `$_->{'name'} \{$_->{'type'}\}`: $_->{'description'}\n"; - } - else { - print "- `$_->{'name'}`: $_->{'description'}\n"; - } - } - } - else { - print "\tnothing\n"; - } - print "\n**Returns:**\n\n"; - if ( $f->{'return'} && $f->{'return'}->{'description'} ) { - $_ = $f->{'return'}; - if ( $_->{'type'} ) { - print "- `\{$_->{'type'}\}`: $_->{'description'}\n"; - } - else { - print "- $_->{'description'}\n"; - } - } - else { - print "\tnothing\n"; - } - if ( $f->{'example'} ) { - print <<EOD; - -Example: - -~~~lua -$f->{'example'} -~~~ -EOD - } -} - -sub print_markdown { - while ( my ( $mname, $m ) = each %modules ) { - print_module_markdown( $mname, $m ); - - print -"\n## Functions\n\nThe module `$mname` defines the following functions.\n\n"; - foreach ( @{ $m->{'functions'} } ) { - print_function_markdown( "Function", $_->{'name'}, $_ ); - print "\nBack to [module description](#$m->{'id'}).\n\n"; - - } - print -"\n## Methods\n\nThe module `$mname` defines the following methods.\n\n"; - foreach ( @{ $m->{'methods'} } ) { - print_function_markdown( "Method", $_->{'name'}, $_ ); - print "\nBack to [module description](#$m->{'id'}).\n\n"; - - } - print "\nBack to [top](#).\n\n"; - } -} - -sub make_id { - my ( $name, $prefix ) = @_; - - if ( !$prefix ) { - $prefix = "f"; - } - $name =~ /^(\S+).*$/; - return substr( $prefix . md5_hex($1), 0, 6 ); -} - -sub substitute_data_keywords { - my ($line) = @_; - - if ( $line =~ /^.*\@see\s+(\S+)\s*.*$/ ) { - my $name = $1; - my $id = make_id($name); - return $line =~ s/\@see\s+\S+/[`$name`](#$id)/r; - } - - return $line; -} - -sub parse_function { - my ( $func, @data ) = @_; - - my ( $type, $name ) = ( $func =~ /^\@(\w+)\s*(.+)\s*$/ ); - - my $f = { - name => $name, - data => '', - example => undef, - id => make_id($name), - }; - my $example = 0; - - foreach (@data) { - if (/^\@param\s*(?:\{([^}]+)\})?\s*(\S+)\s*(.+)?\s*$/) { - my $p = { name => $2, type => $1, description => $3 }; - push @{ $f->{'params'} }, $p; - } - elsif (/^\@return\s*(?:\{([^}]+)\})?\s*(.+)?\s*$/) { - my $r = { type => $1, description => $2 }; - $f->{'return'} = $r; - } - elsif (/^\@example$/) { - $example = 1; - } - elsif ( $_ ne $func ) { - if ($example) { - $f->{'example'} .= $_; - } - else { - $f->{'data'} .= substitute_data_keywords($_); - } - } - } - if ( $f->{'data'} ) { - chomp $f->{'data'}; - } - if ( $f->{'example'} ) { - chomp $f->{'example'}; - } - - if ( $type eq "function" ) { - push @{ $cur_module->{'functions'} }, $f; - } - else { - push @{ $cur_module->{'methods'} }, $f; - } -} - -sub parse_module { - my ( $module, @data ) = @_; - - my ($name) = ( $module =~ /^\@module\s*(.+)\s*$/ ); - - $modules{$name} = { - functions => [], - methods => [], - data => '', - example => undef, - id => make_id( $name, 'm' ), - }; - my $f = $modules{$name}; - my $example = 0; - - foreach (@data) { - if (/^\@example$/) { - $example = 1; - } - elsif ( $_ ne $module ) { - if ($example) { - $f->{'example'} .= $_; - } - else { - $f->{'data'} .= substitute_data_keywords($_); - } - } - } - if ( $f->{'data'} ) { - chomp $f->{'data'}; - } - if ( $f->{'example'} ) { - chomp $f->{'example'}; - } - $cur_module = $f; -} - -sub parse_content { - my @func = grep /^\@function|method.+$/, @_; - if ( scalar @func > 0 ) { - parse_function( $func[0], @_ ); - } - else { - my @module = grep /^\@module.+$/, @_; - if ( scalar @module > 0 ) { - parse_module( $module[0], @_ ); - } - } -} - -while (<>) { - if ( $state == STATE_READ_SKIP ) { - if ( $_ =~ /^\s*\/\*\*\*$/ ) { - $state = STATE_READ_CONTENT; - $content = ""; - } - } - elsif ( $state == STATE_READ_CONTENT ) { - if ( $_ =~ /^\s*\*\/$/ ) { - $state = STATE_READ_SKIP; - parse_content( split /^/, $content ); - $content = ""; - } - else { - my ($line) = ( $_ =~ /^(?:\s*\*\s)?(.+)\s*$/ ); - if ($line) { - $content .= $line . "\n"; - } - else { - # Preserve empty lines - $content .= "\n"; - } - } - } -} - -#print Dumper( \%modules ); -print_markdown; |