authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-07 11:31:47-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-07 11:31:47-04:00
log85b8854c417a3b4bf2347c4f3709a047c4d311bd
treec6121378448fce8db6a9a3a71bab235435a6811a
parente706cc24f057fe81beef207254b9d77fff21b644
signaturelock-open Commit is signed but in an unrecognized format.

move doc/ to docs/

fixes regression caused by 86171afb9b7d

4 files changed, 467 insertions(+), 467 deletions(-)

lib/std/special/doc/index.html deleted-85
......@@ -1,85 +0,0 @@
1<!doctype html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <title>Documentation - Zig</title>
6 <link rel="icon" href="favicon.png">
7 <style type="text/css">
8 body {
9 font-family: system-ui, -apple-system, Roboto, "Segoe UI", sans-serif;
10 }
11 .hidden {
12 display: none;
13 }
14 a {
15 color: #2A6286;
16 }
17 pre{
18 font-family:"Source Code Pro",monospace;
19 font-size:1em;
20 background-color:#F5F5F5;
21 padding:1em;
22 }
23 #listNav {
24 list-style-type: none;
25 margin: 0;
26 padding: 0;
27 overflow: hidden;
28 background-color: #333;
29 }
30 #listNav li {
31 float:left;
32 }
33 #listNav li a {
34 display: block;
35 color: #fff;
36 text-align: center;
37 padding: .8em .8em;
38 text-decoration: none;
39 }
40 #listNav li a:hover {
41 background-color: #111;
42 }
43 #listNav li a.active {
44 background-color: #4CAF50;
45 }
46
47 @media (prefers-color-scheme: dark) {
48 body{
49 background-color: #111;
50 color: #bbb;
51 }
52 a {
53 color: #88f;
54 }
55 pre{
56 background-color:#2A2A2A;
57 }
58 }
59 </style>
60 </head>
61 <body>
62 <p id="status">Loading...</p>
63 <div id="sectNav" class="hidden"><ul id="listNav"></ul></div>
64 <div id="fnProto" class="hidden">
65 <pre id="fnProtoCode"></pre>
66 </div>
67 <div id="sectPkgs" class="hidden">
68 <h2>Packages</h2>
69 <ul id="listPkgs">
70 </ul>
71 </div>
72 <div id="sectTypes" class="hidden">
73 <h2>Types</h2>
74 <ul id="listTypes">
75 </ul>
76 </div>
77 <div id="sectFns" class="hidden">
78 <h2>Functions</h2>
79 <ul id="listFns">
80 </ul>
81 </div>
82 <script src="data.js"></script>
83 <script src="main.js"></script>
84 </body>
85</html>
lib/std/special/doc/main.js deleted-382
......@@ -1,382 +0,0 @@
1(function() {
2 var domStatus = document.getElementById("status");
3 var domSectNav = document.getElementById("sectNav");
4 var domListNav = document.getElementById("listNav");
5 var domSectPkgs = document.getElementById("sectPkgs");
6 var domListPkgs = document.getElementById("listPkgs");
7 var domSectTypes = document.getElementById("sectTypes");
8 var domListTypes = document.getElementById("listTypes");
9 var domSectFns = document.getElementById("sectFns");
10 var domListFns = document.getElementById("listFns");
11 var domFnProto = document.getElementById("fnProto");
12 var domFnProtoCode = document.getElementById("fnProtoCode");
13
14 var typeKindTypeId;
15 var typeKindFnId;
16 findTypeKinds();
17
18 // for each package, is an array with packages to get to this one
19 var canonPkgPaths = computeCanonicalPackagePaths();
20
21 var curNav = {
22 // each element is a package name, e.g. @import("a") then within there @import("b")
23 // starting implicitly from root package
24 pkgNames: [],
25 // same as above except actual packages, not names
26 pkgObjs: [],
27 // Each element is a decl name, `a.b.c`, a is 0, b is 1, c is 2, etc.
28 // empty array means refers to the package itself
29 declNames: [],
30 // these will be all types, except the last one may be a type or a decl
31 declObjs: [],
32 };
33
34 var rootIsStd = detectRootIsStd();
35 var typeTypeId = findTypeTypeId();
36 window.addEventListener('hashchange', onHashChange, false);
37 onHashChange();
38
39 function renderTitle() {
40 var list = curNav.pkgNames.concat(curNav.declNames);
41 var suffix = " - Zig";
42 if (list.length === 0) {
43 if (rootIsStd) {
44 document.title = "std" + suffix;
45 } else {
46 document.title = zigAnalysis.params.rootName + suffix;
47 }
48 } else {
49 document.title = list.join('.') + suffix;
50 }
51 }
52
53 function render() {
54 domStatus.classList.add("hidden");
55 domFnProto.classList.add("hidden");
56
57 renderTitle();
58
59 var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
60 curNav.pkgObjs = [pkg];
61 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
62 var childPkg = zigAnalysis.packages[pkg.table[curNav.pkgNames[i]]];
63 if (childPkg == null) {
64 return render404();
65 }
66 pkg = childPkg;
67 curNav.pkgObjs.push(pkg);
68 }
69
70 var decl = zigAnalysis.types[pkg.main];
71 curNav.declObjs = [decl];
72 for (var i = 0; i < curNav.declNames.length; i += 1) {
73 var childDecl = findSubDecl(decl, curNav.declNames[i]);
74 if (childDecl == null) {
75 return render404();
76 }
77 var container = getDeclContainerType(childDecl);
78 if (container == null) {
79 if (i + 1 === curNav.declNames.length) {
80 curNav.declObjs.push(childDecl);
81 break;
82 } else {
83 return render404();
84 }
85 }
86 decl = container;
87 curNav.declObjs.push(decl);
88 }
89
90 renderNav();
91
92 var lastPkg = curNav.pkgObjs[curNav.pkgObjs.length - 1];
93 renderPkgList(lastPkg);
94
95 var lastDecl = curNav.declObjs[curNav.declObjs.length - 1];
96 if (lastDecl.pubDecls != null) {
97 return renderContainer(lastDecl);
98 } else if (lastDecl.type != null) {
99 var typeObj = zigAnalysis.types[lastDecl.type];
100 if (typeObj.kind === typeKindFnId) {
101 return renderFn(lastDecl);
102 }
103 throw new Error("docs for this decl which is not a container");
104 } else {
105 throw new Error("docs for this decl which is a type");
106 }
107 }
108
109 function renderFn(fnDecl) {
110 domSectPkgs.classList.add("hidden");
111 domSectTypes.classList.add("hidden");
112 domSectFns.classList.add("hidden");
113
114 var typeObj = zigAnalysis.types[fnDecl.type];
115 domFnProtoCode.textContent = "fn " + fnDecl.name + typeObj.name.substring(2);
116
117 domFnProto.classList.remove("hidden");
118 }
119
120 function renderNav() {
121 var len = curNav.pkgNames.length + curNav.declNames.length;
122 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
123 var list = [];
124 var hrefPkgNames = [];
125 var hrefDeclNames = [];
126 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
127 hrefPkgNames.push(curNav.pkgNames[i]);
128 list.push({
129 name: curNav.pkgNames[i],
130 link: navLink(hrefPkgNames, hrefDeclNames),
131 });
132 }
133 for (var i = 0; i < curNav.declNames.length; i += 1) {
134 hrefDeclNames.push(curNav.declNames[i]);
135 list.push({
136 name: curNav.declNames[i],
137 link: navLink(hrefPkgNames, hrefDeclNames),
138 });
139 }
140
141 for (var i = 0; i < list.length; i += 1) {
142 var liDom = domListNav.children[i];
143 var aDom = liDom.children[0];
144 aDom.textContent = list[i].name;
145 aDom.setAttribute('href', list[i].link);
146 if (i + 1 == list.length) {
147 aDom.classList.add("active");
148 } else {
149 aDom.classList.remove("active");
150 }
151 }
152
153 domSectNav.classList.remove("hidden");
154 }
155
156 function render404() {
157 domStatus.textContent = "404 Not Found";
158 domStatus.classList.remove("hidden");
159 domSectPkgs.classList.add("hidden");
160 domSectTypes.classList.add("hidden");
161 domSectFns.classList.add("hidden");
162 domFnProto.classList.add("hidden");
163 }
164
165 function renderPkgList(pkg) {
166 var list = [];
167 for (var key in pkg.table) {
168 if (key === "root" && rootIsStd) continue;
169 list.push({
170 name: key,
171 pkg: pkg.table[key],
172 });
173 }
174 list.sort(function(a, b) {
175 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
176 });
177
178 if (list.length === 0) {
179 domSectPkgs.classList.add("hidden");
180 } else {
181 resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>');
182 for (var i = 0; i < list.length; i += 1) {
183 var liDom = domListPkgs.children[i];
184 var aDom = liDom.children[0];
185 aDom.textContent = list[i].name;
186 aDom.setAttribute('href', navLinkPkg(list[i].pkg));
187 }
188
189 domSectPkgs.classList.remove("hidden");
190 }
191 }
192
193 function navLink(pkgNames, declNames) {
194 if (pkgNames.length === 0 && declNames.length === 0) {
195 return '#';
196 } else if (declNames.length === 0) {
197 return '#' + pkgNames.join('.');
198 } else {
199 return '#' + pkgNames.join('.') + ';' + declNames.join('.');
200 }
201 }
202
203 function navLinkPkg(pkgIndex) {
204 return navLink(canonPkgPaths[pkgIndex], []);
205 }
206
207 function navLinkDecl(childName) {
208 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
209 }
210
211 function resizeDomList(listDom, desiredLen, templateHtml) {
212 // add the missing dom entries
213 var i, ev;
214 for (i = listDom.childElementCount; i < desiredLen; i += 1) {
215 listDom.insertAdjacentHTML('beforeend', templateHtml);
216 }
217 // remove extra dom entries
218 while (desiredLen < listDom.childElementCount) {
219 listDom.removeChild(listDom.lastChild);
220 }
221 }
222
223 function renderContainer(container) {
224 var typesList = [];
225 var fnsList = [];
226 for (var i = 0; i < container.pubDecls.length; i += 1) {
227 var decl = zigAnalysis.decls[container.pubDecls[i]];
228 if (decl.type != null) {
229 if (decl.type == typeTypeId) {
230 typesList.push(decl);
231 } else {
232 var typeKind = zigAnalysis.types[decl.type].kind;
233 if (typeKind === typeKindFnId) {
234 fnsList.push(decl);
235 }
236 }
237 }
238 }
239 typesList.sort(function(a, b) {
240 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
241 });
242 fnsList.sort(function(a, b) {
243 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
244 });
245
246 if (typesList.length === 0) {
247 domSectTypes.classList.add("hidden");
248 } else {
249 resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>');
250 for (var i = 0; i < typesList.length; i += 1) {
251 var liDom = domListTypes.children[i];
252 var aDom = liDom.children[0];
253 var decl = typesList[i];
254 aDom.textContent = decl.name;
255 aDom.setAttribute('href', navLinkDecl(decl.name));
256 }
257 domSectTypes.classList.remove("hidden");
258 }
259
260 if (fnsList.length === 0) {
261 domSectFns.classList.add("hidden");
262 } else {
263 resizeDomList(domListFns, fnsList.length, '<li><a href="#"></a></li>');
264 for (var i = 0; i < fnsList.length; i += 1) {
265 var liDom = domListFns.children[i];
266 var aDom = liDom.children[0];
267 var decl = fnsList[i];
268 aDom.textContent = decl.name;
269 aDom.setAttribute('href', navLinkDecl(decl.name));
270 }
271 domSectFns.classList.remove("hidden");
272 }
273 }
274
275 function operatorCompare(a, b) {
276 if (a === b) {
277 return 0;
278 } else if (a < b) {
279 return -1;
280 } else {
281 return 1;
282 }
283 }
284
285 function detectRootIsStd() {
286 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
287 if (rootPkg.table["std"] == null) {
288 // no std mapped into the root package
289 return false;
290 }
291 var stdPkg = zigAnalysis.packages[rootPkg.table["std"]];
292 return rootPkg.file === stdPkg.file;
293 }
294
295 function findTypeKinds() {
296 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
297 if (zigAnalysis.typeKinds[i] === "Type") {
298 typeKindTypeId = i;
299 } else if (zigAnalysis.typeKinds[i] === "Fn") {
300 typeKindFnId = i;
301 }
302 }
303 if (typeKindTypeId == null) {
304 throw new Error("No type kind 'Type' found");
305 }
306 if (typeKindFnId == null) {
307 throw new Error("No type kind 'Fn' found");
308 }
309 }
310
311 function findTypeTypeId() {
312 for (var i = 0; i < zigAnalysis.types.length; i += 1) {
313 if (zigAnalysis.types[i].kind == typeKindTypeId) {
314 return i;
315 }
316 }
317 throw new Error("No type 'type' found");
318 }
319
320 function onHashChange() {
321 curNav = {
322 pkgNames: [],
323 pkgObjs: [],
324 declNames: [],
325 declObjs: [],
326 };
327 if (location.hash[0] === '#' && location.hash.length > 1) {
328 var parts = location.hash.substring(1).split(";");
329 curNav.pkgNames = parts[0].split(".");
330 if (parts[1] != null) {
331 curNav.declNames = parts[1].split(".");
332 }
333 }
334 render();
335 }
336
337 function findSubDecl(parentType, childName) {
338 if (parentType.pubDecls == null) throw new Error("parent object has no public decls");
339 for (var i = 0; i < parentType.pubDecls.length; i += 1) {
340 var declIndex = parentType.pubDecls[i];
341 var childDecl = zigAnalysis.decls[declIndex];
342 if (childDecl.name === childName) {
343 return childDecl;
344 }
345 }
346 return null;
347 }
348
349 function getDeclContainerType(decl) {
350 if (decl.type === typeTypeId) {
351 return zigAnalysis.types[decl.value];
352 }
353 return null;
354 }
355
356 function computeCanonicalPackagePaths() {
357 var list = new Array(zigAnalysis.packages.length);
358 // Now we try to find all the packages from root.
359 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
360 // Breadth-first to keep the path shortest possible.
361 var stack = [{
362 path: [],
363 pkg: rootPkg,
364 }];
365 while (stack.length !== 0) {
366 var item = stack.pop();
367 for (var key in item.pkg.table) {
368 var childPkgIndex = item.pkg.table[key];
369 if (list[childPkgIndex] != null) continue;
370
371 var newPath = item.path.concat([key])
372 list[childPkgIndex] = newPath;
373 var childPkg = zigAnalysis.packages[childPkgIndex];
374 stack.push({
375 path: newPath,
376 pkg: childPkg,
377 });
378 }
379 }
380 return list;
381 }
382})();
lib/std/special/docs/index.html created+85
......@@ -0,0 +1,85 @@
1<!doctype html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <title>Documentation - Zig</title>
6 <link rel="icon" href="favicon.png">
7 <style type="text/css">
8 body {
9 font-family: system-ui, -apple-system, Roboto, "Segoe UI", sans-serif;
10 }
11 .hidden {
12 display: none;
13 }
14 a {
15 color: #2A6286;
16 }
17 pre{
18 font-family:"Source Code Pro",monospace;
19 font-size:1em;
20 background-color:#F5F5F5;
21 padding:1em;
22 }
23 #listNav {
24 list-style-type: none;
25 margin: 0;
26 padding: 0;
27 overflow: hidden;
28 background-color: #333;
29 }
30 #listNav li {
31 float:left;
32 }
33 #listNav li a {
34 display: block;
35 color: #fff;
36 text-align: center;
37 padding: .8em .8em;
38 text-decoration: none;
39 }
40 #listNav li a:hover {
41 background-color: #111;
42 }
43 #listNav li a.active {
44 background-color: #4CAF50;
45 }
46
47 @media (prefers-color-scheme: dark) {
48 body{
49 background-color: #111;
50 color: #bbb;
51 }
52 a {
53 color: #88f;
54 }
55 pre{
56 background-color:#2A2A2A;
57 }
58 }
59 </style>
60 </head>
61 <body>
62 <p id="status">Loading...</p>
63 <div id="sectNav" class="hidden"><ul id="listNav"></ul></div>
64 <div id="fnProto" class="hidden">
65 <pre id="fnProtoCode"></pre>
66 </div>
67 <div id="sectPkgs" class="hidden">
68 <h2>Packages</h2>
69 <ul id="listPkgs">
70 </ul>
71 </div>
72 <div id="sectTypes" class="hidden">
73 <h2>Types</h2>
74 <ul id="listTypes">
75 </ul>
76 </div>
77 <div id="sectFns" class="hidden">
78 <h2>Functions</h2>
79 <ul id="listFns">
80 </ul>
81 </div>
82 <script src="data.js"></script>
83 <script src="main.js"></script>
84 </body>
85</html>
lib/std/special/docs/main.js created+382
......@@ -0,0 +1,382 @@
1(function() {
2 var domStatus = document.getElementById("status");
3 var domSectNav = document.getElementById("sectNav");
4 var domListNav = document.getElementById("listNav");
5 var domSectPkgs = document.getElementById("sectPkgs");
6 var domListPkgs = document.getElementById("listPkgs");
7 var domSectTypes = document.getElementById("sectTypes");
8 var domListTypes = document.getElementById("listTypes");
9 var domSectFns = document.getElementById("sectFns");
10 var domListFns = document.getElementById("listFns");
11 var domFnProto = document.getElementById("fnProto");
12 var domFnProtoCode = document.getElementById("fnProtoCode");
13
14 var typeKindTypeId;
15 var typeKindFnId;
16 findTypeKinds();
17
18 // for each package, is an array with packages to get to this one
19 var canonPkgPaths = computeCanonicalPackagePaths();
20
21 var curNav = {
22 // each element is a package name, e.g. @import("a") then within there @import("b")
23 // starting implicitly from root package
24 pkgNames: [],
25 // same as above except actual packages, not names
26 pkgObjs: [],
27 // Each element is a decl name, `a.b.c`, a is 0, b is 1, c is 2, etc.
28 // empty array means refers to the package itself
29 declNames: [],
30 // these will be all types, except the last one may be a type or a decl
31 declObjs: [],
32 };
33
34 var rootIsStd = detectRootIsStd();
35 var typeTypeId = findTypeTypeId();
36 window.addEventListener('hashchange', onHashChange, false);
37 onHashChange();
38
39 function renderTitle() {
40 var list = curNav.pkgNames.concat(curNav.declNames);
41 var suffix = " - Zig";
42 if (list.length === 0) {
43 if (rootIsStd) {
44 document.title = "std" + suffix;
45 } else {
46 document.title = zigAnalysis.params.rootName + suffix;
47 }
48 } else {
49 document.title = list.join('.') + suffix;
50 }
51 }
52
53 function render() {
54 domStatus.classList.add("hidden");
55 domFnProto.classList.add("hidden");
56
57 renderTitle();
58
59 var pkg = zigAnalysis.packages[zigAnalysis.rootPkg];
60 curNav.pkgObjs = [pkg];
61 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
62 var childPkg = zigAnalysis.packages[pkg.table[curNav.pkgNames[i]]];
63 if (childPkg == null) {
64 return render404();
65 }
66 pkg = childPkg;
67 curNav.pkgObjs.push(pkg);
68 }
69
70 var decl = zigAnalysis.types[pkg.main];
71 curNav.declObjs = [decl];
72 for (var i = 0; i < curNav.declNames.length; i += 1) {
73 var childDecl = findSubDecl(decl, curNav.declNames[i]);
74 if (childDecl == null) {
75 return render404();
76 }
77 var container = getDeclContainerType(childDecl);
78 if (container == null) {
79 if (i + 1 === curNav.declNames.length) {
80 curNav.declObjs.push(childDecl);
81 break;
82 } else {
83 return render404();
84 }
85 }
86 decl = container;
87 curNav.declObjs.push(decl);
88 }
89
90 renderNav();
91
92 var lastPkg = curNav.pkgObjs[curNav.pkgObjs.length - 1];
93 renderPkgList(lastPkg);
94
95 var lastDecl = curNav.declObjs[curNav.declObjs.length - 1];
96 if (lastDecl.pubDecls != null) {
97 return renderContainer(lastDecl);
98 } else if (lastDecl.type != null) {
99 var typeObj = zigAnalysis.types[lastDecl.type];
100 if (typeObj.kind === typeKindFnId) {
101 return renderFn(lastDecl);
102 }
103 throw new Error("docs for this decl which is not a container");
104 } else {
105 throw new Error("docs for this decl which is a type");
106 }
107 }
108
109 function renderFn(fnDecl) {
110 domSectPkgs.classList.add("hidden");
111 domSectTypes.classList.add("hidden");
112 domSectFns.classList.add("hidden");
113
114 var typeObj = zigAnalysis.types[fnDecl.type];
115 domFnProtoCode.textContent = "fn " + fnDecl.name + typeObj.name.substring(2);
116
117 domFnProto.classList.remove("hidden");
118 }
119
120 function renderNav() {
121 var len = curNav.pkgNames.length + curNav.declNames.length;
122 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
123 var list = [];
124 var hrefPkgNames = [];
125 var hrefDeclNames = [];
126 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
127 hrefPkgNames.push(curNav.pkgNames[i]);
128 list.push({
129 name: curNav.pkgNames[i],
130 link: navLink(hrefPkgNames, hrefDeclNames),
131 });
132 }
133 for (var i = 0; i < curNav.declNames.length; i += 1) {
134 hrefDeclNames.push(curNav.declNames[i]);
135 list.push({
136 name: curNav.declNames[i],
137 link: navLink(hrefPkgNames, hrefDeclNames),
138 });
139 }
140
141 for (var i = 0; i < list.length; i += 1) {
142 var liDom = domListNav.children[i];
143 var aDom = liDom.children[0];
144 aDom.textContent = list[i].name;
145 aDom.setAttribute('href', list[i].link);
146 if (i + 1 == list.length) {
147 aDom.classList.add("active");
148 } else {
149 aDom.classList.remove("active");
150 }
151 }
152
153 domSectNav.classList.remove("hidden");
154 }
155
156 function render404() {
157 domStatus.textContent = "404 Not Found";
158 domStatus.classList.remove("hidden");
159 domSectPkgs.classList.add("hidden");
160 domSectTypes.classList.add("hidden");
161 domSectFns.classList.add("hidden");
162 domFnProto.classList.add("hidden");
163 }
164
165 function renderPkgList(pkg) {
166 var list = [];
167 for (var key in pkg.table) {
168 if (key === "root" && rootIsStd) continue;
169 list.push({
170 name: key,
171 pkg: pkg.table[key],
172 });
173 }
174 list.sort(function(a, b) {
175 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
176 });
177
178 if (list.length === 0) {
179 domSectPkgs.classList.add("hidden");
180 } else {
181 resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>');
182 for (var i = 0; i < list.length; i += 1) {
183 var liDom = domListPkgs.children[i];
184 var aDom = liDom.children[0];
185 aDom.textContent = list[i].name;
186 aDom.setAttribute('href', navLinkPkg(list[i].pkg));
187 }
188
189 domSectPkgs.classList.remove("hidden");
190 }
191 }
192
193 function navLink(pkgNames, declNames) {
194 if (pkgNames.length === 0 && declNames.length === 0) {
195 return '#';
196 } else if (declNames.length === 0) {
197 return '#' + pkgNames.join('.');
198 } else {
199 return '#' + pkgNames.join('.') + ';' + declNames.join('.');
200 }
201 }
202
203 function navLinkPkg(pkgIndex) {
204 return navLink(canonPkgPaths[pkgIndex], []);
205 }
206
207 function navLinkDecl(childName) {
208 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
209 }
210
211 function resizeDomList(listDom, desiredLen, templateHtml) {
212 // add the missing dom entries
213 var i, ev;
214 for (i = listDom.childElementCount; i < desiredLen; i += 1) {
215 listDom.insertAdjacentHTML('beforeend', templateHtml);
216 }
217 // remove extra dom entries
218 while (desiredLen < listDom.childElementCount) {
219 listDom.removeChild(listDom.lastChild);
220 }
221 }
222
223 function renderContainer(container) {
224 var typesList = [];
225 var fnsList = [];
226 for (var i = 0; i < container.pubDecls.length; i += 1) {
227 var decl = zigAnalysis.decls[container.pubDecls[i]];
228 if (decl.type != null) {
229 if (decl.type == typeTypeId) {
230 typesList.push(decl);
231 } else {
232 var typeKind = zigAnalysis.types[decl.type].kind;
233 if (typeKind === typeKindFnId) {
234 fnsList.push(decl);
235 }
236 }
237 }
238 }
239 typesList.sort(function(a, b) {
240 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
241 });
242 fnsList.sort(function(a, b) {
243 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
244 });
245
246 if (typesList.length === 0) {
247 domSectTypes.classList.add("hidden");
248 } else {
249 resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>');
250 for (var i = 0; i < typesList.length; i += 1) {
251 var liDom = domListTypes.children[i];
252 var aDom = liDom.children[0];
253 var decl = typesList[i];
254 aDom.textContent = decl.name;
255 aDom.setAttribute('href', navLinkDecl(decl.name));
256 }
257 domSectTypes.classList.remove("hidden");
258 }
259
260 if (fnsList.length === 0) {
261 domSectFns.classList.add("hidden");
262 } else {
263 resizeDomList(domListFns, fnsList.length, '<li><a href="#"></a></li>');
264 for (var i = 0; i < fnsList.length; i += 1) {
265 var liDom = domListFns.children[i];
266 var aDom = liDom.children[0];
267 var decl = fnsList[i];
268 aDom.textContent = decl.name;
269 aDom.setAttribute('href', navLinkDecl(decl.name));
270 }
271 domSectFns.classList.remove("hidden");
272 }
273 }
274
275 function operatorCompare(a, b) {
276 if (a === b) {
277 return 0;
278 } else if (a < b) {
279 return -1;
280 } else {
281 return 1;
282 }
283 }
284
285 function detectRootIsStd() {
286 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
287 if (rootPkg.table["std"] == null) {
288 // no std mapped into the root package
289 return false;
290 }
291 var stdPkg = zigAnalysis.packages[rootPkg.table["std"]];
292 return rootPkg.file === stdPkg.file;
293 }
294
295 function findTypeKinds() {
296 for (var i = 0; i < zigAnalysis.typeKinds.length; i += 1) {
297 if (zigAnalysis.typeKinds[i] === "Type") {
298 typeKindTypeId = i;
299 } else if (zigAnalysis.typeKinds[i] === "Fn") {
300 typeKindFnId = i;
301 }
302 }
303 if (typeKindTypeId == null) {
304 throw new Error("No type kind 'Type' found");
305 }
306 if (typeKindFnId == null) {
307 throw new Error("No type kind 'Fn' found");
308 }
309 }
310
311 function findTypeTypeId() {
312 for (var i = 0; i < zigAnalysis.types.length; i += 1) {
313 if (zigAnalysis.types[i].kind == typeKindTypeId) {
314 return i;
315 }
316 }
317 throw new Error("No type 'type' found");
318 }
319
320 function onHashChange() {
321 curNav = {
322 pkgNames: [],
323 pkgObjs: [],
324 declNames: [],
325 declObjs: [],
326 };
327 if (location.hash[0] === '#' && location.hash.length > 1) {
328 var parts = location.hash.substring(1).split(";");
329 curNav.pkgNames = parts[0].split(".");
330 if (parts[1] != null) {
331 curNav.declNames = parts[1].split(".");
332 }
333 }
334 render();
335 }
336
337 function findSubDecl(parentType, childName) {
338 if (parentType.pubDecls == null) throw new Error("parent object has no public decls");
339 for (var i = 0; i < parentType.pubDecls.length; i += 1) {
340 var declIndex = parentType.pubDecls[i];
341 var childDecl = zigAnalysis.decls[declIndex];
342 if (childDecl.name === childName) {
343 return childDecl;
344 }
345 }
346 return null;
347 }
348
349 function getDeclContainerType(decl) {
350 if (decl.type === typeTypeId) {
351 return zigAnalysis.types[decl.value];
352 }
353 return null;
354 }
355
356 function computeCanonicalPackagePaths() {
357 var list = new Array(zigAnalysis.packages.length);
358 // Now we try to find all the packages from root.
359 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
360 // Breadth-first to keep the path shortest possible.
361 var stack = [{
362 path: [],
363 pkg: rootPkg,
364 }];
365 while (stack.length !== 0) {
366 var item = stack.pop();
367 for (var key in item.pkg.table) {
368 var childPkgIndex = item.pkg.table[key];
369 if (list[childPkgIndex] != null) continue;
370
371 var newPath = item.path.concat([key])
372 list[childPkgIndex] = newPath;
373 var childPkg = zigAnalysis.packages[childPkgIndex];
374 stack.push({
375 path: newPath,
376 pkg: childPkg,
377 });
378 }
379 }
380 return list;
381 }
382})();