blob: a6686c0db6b185596ab76b9ce2720a0d26df4498 [file] [log] [blame]
Colin Crosse87040b2017-12-11 15:52:26 -08001// Copyright 2017 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package main
16
17import (
18 "android/soong/android"
19 "bytes"
20 "html/template"
21 "io/ioutil"
22
23 "github.com/google/blueprint/bootstrap"
24)
25
26func writeDocs(ctx *android.Context, filename string) error {
27 moduleTypeList, err := bootstrap.ModuleTypeDocs(ctx.Context)
28 if err != nil {
29 return err
30 }
31
32 buf := &bytes.Buffer{}
33
34 unique := 0
35
36 tmpl, err := template.New("file").Funcs(map[string]interface{}{
37 "unique": func() int {
38 unique++
39 return unique
40 }}).Parse(fileTemplate)
41 if err != nil {
42 return err
43 }
44
45 err = tmpl.Execute(buf, moduleTypeList)
46 if err != nil {
47 return err
48 }
49
50 err = ioutil.WriteFile(filename, buf.Bytes(), 0666)
51 if err != nil {
52 return err
53 }
54
55 return nil
56}
57
58const (
59 fileTemplate = `
60<html>
61<head>
62<title>Build Docs</title>
63<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
64<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
65<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
66</head>
67<body>
68<h1>Build Docs</h1>
69<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
70 {{range .}}
71 {{ $collapseIndex := unique }}
72 <div class="panel panel-default">
73 <div class="panel-heading" role="tab" id="heading{{$collapseIndex}}">
74 <h2 class="panel-title">
75 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{{$collapseIndex}}" aria-expanded="false" aria-controls="collapse{{$collapseIndex}}">
76 {{.Name}}
77 </a>
78 </h2>
79 </div>
80 </div>
81 <div id="collapse{{$collapseIndex}}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading{{$collapseIndex}}">
82 <div class="panel-body">
83 <p>{{.Text}}</p>
84 {{range .PropertyStructs}}
85 <p>{{.Text}}</p>
86 {{template "properties" .Properties}}
87 {{end}}
88 </div>
89 </div>
90 {{end}}
91</div>
92</body>
93</html>
94
95{{define "properties"}}
96 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
97 {{range .}}
98 {{$collapseIndex := unique}}
99 {{if .Properties}}
100 <div class="panel panel-default">
101 <div class="panel-heading" role="tab" id="heading{{$collapseIndex}}">
102 <h4 class="panel-title">
103 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{{$collapseIndex}}" aria-expanded="false" aria-controls="collapse{{$collapseIndex}}">
104 {{.Name}}{{range .OtherNames}}, {{.}}{{end}}
105 </a>
106 </h4>
107 </div>
108 </div>
109 <div id="collapse{{$collapseIndex}}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading{{$collapseIndex}}">
110 <div class="panel-body">
111 <p>{{.Text}}</p>
112 {{range .OtherTexts}}<p>{{.}}</p>{{end}}
113 {{template "properties" .Properties}}
114 </div>
115 </div>
116 {{else}}
117 <div>
118 <h4>{{.Name}}{{range .OtherNames}}, {{.}}{{end}}</h4>
119 <p>{{.Text}}</p>
120 {{range .OtherTexts}}<p>{{.}}</p>{{end}}
121 <p><i>Type: {{.Type}}</i></p>
122 {{if .Default}}<p><i>Default: {{.Default}}</i></p>{{end}}
123 </div>
124 {{end}}
125 {{end}}
126 </div>
127{{end}}
128`
129)