| #!/usr/bin/perl |
| # |
| # Copyright (C) 2015 Google, Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at: |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| use strict; |
| use warnings; |
| use Cwd 'abs_path'; |
| use JSON; |
| use File::Find; |
| |
| my $sl4a_path = $ARGV[0]; |
| my $md = ""; |
| my $md_end = ""; |
| |
| if (not defined $sl4a_path) { |
| $sl4a_path = abs_path($0); |
| $sl4a_path =~ s/\/Docs\/generate_api_reference_md\.pl//g; |
| } |
| |
| sub eachFile { |
| my $filename = $_; |
| my $fullpath = $File::Find::name; |
| if (-e $filename && $filename =~ m/Facade\.java/) { |
| open(FILE, $filename); |
| my @lines = <FILE>; |
| close(FILE); |
| |
| my $title = $filename; |
| $title =~ s/\.java//; |
| $title = '**' . $title . '**' . "\n"; |
| $md = $md . "\n$title"; |
| my $description = ""; |
| for (my $i = 0; $i < scalar(@lines); $i++) { |
| my $line = $lines[$i]; |
| $line =~ s/\n//; |
| $line =~ s/^\s+|\s+$//g; |
| |
| if ($line =~ m /^\@Rpc\(description/) { |
| $description = ""; |
| for (my $j = $i; $j < scalar(@lines); $j++) { |
| my $l = $lines[$j]; |
| $l =~ s/^\s+|\s+$//g; |
| $description = $description . $l; |
| if ($l =~ m/\)$/) { |
| $i = $j; |
| last; |
| } |
| } |
| $description = _format_description($description); |
| |
| } |
| if ($line =~ m /^public/ && $description ne "") { |
| my @words = split(/\s/, $line); |
| my $func_name = $words[2]; |
| my $func_names_and_params = ""; |
| if ($func_name =~ /void/) { |
| $func_name = $words[3]; |
| if ($func_name =~ /void/) { |
| $description = ""; |
| $func_names_and_params = ""; |
| next; |
| } |
| } |
| if ($func_name =~ /\(/) { |
| $func_name =~ s/\(.*//; |
| } |
| $func_name =~ s/\(//g; |
| $func_name =~ s/\)//g; |
| for (my $j = $i; $j < scalar(@lines); $j++) { |
| $func_names_and_params = $func_names_and_params . $lines[$j]; |
| if ($lines[$j] =~ m/{$/) { |
| last; |
| } |
| } |
| $func_names_and_params = _format_func_names_and_params($func_names_and_params); |
| if ($func_names_and_params eq "") { |
| $func_names_and_params = ")\n"; |
| } else { |
| $func_names_and_params = "\n" . $func_names_and_params; |
| } |
| $md_end = $md_end . "# $func_name\n```\n" . |
| "$func_name(" . $func_names_and_params . "\n$description\n```\n\n" ; |
| $description = ""; |
| $func_names_and_params = ""; |
| my $lc_name = lc $func_name; |
| $md = $md . " * [$func_name](\#$lc_name)\n"; |
| } |
| } |
| |
| } |
| } |
| |
| sub _format_func_names_and_params { |
| my $fn = shift; |
| $fn =~ s/^\s+|\s+$//g; |
| my @words = split(/\n/,$fn); |
| my $format = ""; |
| my $description = ""; |
| my $name = ""; |
| my $params = ""; |
| for my $w (@words) { |
| if ($w =~ /\@RpcParameter\(name = "(.+?)", description = "(.+?)"/) { |
| $name = $1; |
| $description = $2; |
| } |
| elsif ($w =~ /\@RpcParameter\(name = "(.+?)"/) { |
| $name = $1; |
| } |
| if ($w =~ m/,$/) { |
| my @split = split(/\s/, $w); |
| $params = "$split[$#split-1] $split[$#split]"; |
| if ($description eq "") { |
| $format = $params; |
| } elsif ($description ne "") { |
| $params =~ s/,//; |
| $format = $format . " $params: $description,\n" |
| } |
| $description = ""; |
| $name = ""; |
| $params = ""; |
| } |
| } |
| $format =~ s/,$/)/; |
| return $format; |
| } |
| |
| sub _format_description { |
| my $description = shift; |
| $description =~ s/\@Rpc\(//; |
| $description =~ s/^\s+|\s+$//g; |
| $description =~ s/\n//g; |
| $description =~ s/description = \"//g; |
| $description =~ s/\"\)//g; |
| if ($description =~ m/returns(\s*)=/) { |
| $description =~ s/\",//; |
| my @words = split(/returns(\s*)=/, $description); |
| my $des = $words[0]; |
| my $ret = $words[1]; |
| $ret =~ s/^\s+|\s+$//g; |
| $ret =~ s/^"//; |
| $description = $des . "\n\n" . "Returns:\n" . " $ret"; |
| } |
| return $description; |
| } |
| |
| find (\&eachFile, $sl4a_path); |
| open(FILE, ">$sl4a_path/Docs/ApiReference.md"); |
| print FILE $md . "\n"; |
| print FILE $md_end . "\n"; |
| close(FILE); |