blob: 546fe281bc7a43940b8491609b4347b1520e2483 [file] [log] [blame]
#!/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);