1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import sys, os, re
class DocumentationItemInfo(object):
def __init__(self, env_root, md_path, filename):
self.env_root = env_root
# full path to MD file, without filename
self.source_path = md_path
# MD filename
self.source_filename = filename
def env_root(self):
return self.env_root
def source_path(self):
return self.source_path
def source_filename(self):
return self.source_filename
def base_filename(self):
return self.source_filename[:-len(".md")]
def source_path_and_filename(self):
return os.sep.join([self.source_path, self.source_filename])
def source_path_relative_from_env_root(self):
return self.source_path[len(self.env_root) + 1:]
class DevGuideItemInfo(DocumentationItemInfo):
def __init__(self, env_root, devguide_root, md_path, filename):
DocumentationItemInfo.__init__(self, env_root, md_path, filename)
self.devguide_root = devguide_root
def source_path_relative_from_devguide_root(self):
return self.source_path[len(self.devguide_root) + 1:]
def destination_path(self):
root_pieces = self.devguide_root.split(os.sep)
root_pieces[-1] = "dev-guide"
return os.sep.join([os.sep.join(root_pieces), self.source_path_relative_from_devguide_root()])
class ModuleInfo(DocumentationItemInfo):
def __init__(self, env_root, module_root, md_path, filename):
DocumentationItemInfo.__init__(self, env_root, md_path, filename)
self.module_root = module_root
def js_module_path(self):
return os.path.join(self.env_root, "lib", self.source_path_relative_from_module_root(), self.source_filename[:-len(".md")] + ".js")
def source_path_relative_from_module_root(self):
return self.source_path[len(self.module_root) + 1:]
def destination_path(self):
if self.level() == "third-party":
return os.sep.join([self.env_root, "doc", "modules", "packages"])
root_pieces = self.module_root.split(os.sep)
root_pieces[-1] = "modules"
relative_pieces = self.source_path_relative_from_module_root().split(os.sep)
return os.sep.join(root_pieces + relative_pieces)
def relative_url(self):
if self.level() == "third-party":
relative_pieces = ["packages"]
else:
relative_pieces = self.source_path_relative_from_module_root().split(os.sep)
return "/".join(relative_pieces) + "/" + self.base_filename() + ".html"
def name(self):
if os.sep.join([self.module_root, "sdk"]) == self.source_path or self.level() == "third-party":
return self.source_filename[:-3]
else:
path_from_root_pieces = self.source_path_relative_from_module_root().split(os.sep)
return "/".join(["/".join(path_from_root_pieces[1:]), self.source_filename[:-len(".md")]])
def level(self):
if self.source_path_relative_from_env_root().startswith("packages"):
return "third-party"
else:
if os.sep.join([self.module_root, "sdk"]) == self.source_path:
return "high"
else:
return "low"
def get_modules_in_package(env_root, package_docs_dir, module_list, ignore_files_in_root):
for (dirpath, dirnames, filenames) in os.walk(package_docs_dir):
for filename in filenames:
# ignore files in the root
if ignore_files_in_root and package_docs_dir == dirpath:
continue
if filename.endswith(".md"):
module_list.append(ModuleInfo(env_root, package_docs_dir, dirpath, filename))
def get_module_list(env_root):
module_list = []
# get the built-in modules
module_root = os.sep.join([env_root, "doc", "module-source"])
get_modules_in_package(env_root, module_root, module_list, True)
# get the third-party modules
packages_root = os.sep.join([env_root, "packages"])
if os.path.exists(packages_root):
for entry in os.listdir(packages_root):
if os.path.isdir(os.sep.join([packages_root, entry])):
package_docs = os.sep.join([packages_root, entry, "docs"])
if os.path.exists(package_docs):
get_modules_in_package(env_root, package_docs, module_list, False)
module_list.sort(key=lambda x: x.name())
return module_list
def get_devguide_list(env_root):
devguide_list = []
devguide_root = os.sep.join([env_root, "doc", "dev-guide-source"])
for (dirpath, dirnames, filenames) in os.walk(devguide_root):
for filename in filenames:
if filename.endswith(".md"):
devguide_list.append(DevGuideItemInfo(env_root, devguide_root, dirpath, filename))
return devguide_list
if __name__ == "__main__":
module_list = get_module_list(sys.argv[1])
print [module_info.name for module_info in module_list]
|