diff options
Diffstat (limited to 'tools/addon-sdk-1.12/python-lib/cuddlefish/docs/documentationitem.py')
-rwxr-xr-x | tools/addon-sdk-1.12/python-lib/cuddlefish/docs/documentationitem.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/tools/addon-sdk-1.12/python-lib/cuddlefish/docs/documentationitem.py b/tools/addon-sdk-1.12/python-lib/cuddlefish/docs/documentationitem.py new file mode 100755 index 0000000..c72133a --- /dev/null +++ b/tools/addon-sdk-1.12/python-lib/cuddlefish/docs/documentationitem.py @@ -0,0 +1,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] |