diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-06-25 19:48:43 +0200 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-10-03 11:46:34 +0200 |
commit | ad65a699f93a7659739287882ca27c58c564670b (patch) | |
tree | 956660da72b5322e1860c27f159da5d0463d5aca /docs/refman/main.py | |
parent | 3feaea6b29197cd224fbce0ac65fd43d08c3beac (diff) | |
download | meson-ad65a699f93a7659739287882ca27c58c564670b.zip meson-ad65a699f93a7659739287882ca27c58c564670b.tar.gz meson-ad65a699f93a7659739287882ca27c58c564670b.tar.bz2 |
docs: Initial reference manual generator
Diffstat (limited to 'docs/refman/main.py')
-rw-r--r-- | docs/refman/main.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/docs/refman/main.py b/docs/refman/main.py new file mode 100644 index 0000000..96698ae --- /dev/null +++ b/docs/refman/main.py @@ -0,0 +1,68 @@ +# Copyright 2021 The Meson development team + +# 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. + +from pathlib import Path +import argparse +import typing as T + +from mesonbuild import mlog + +from .loaderbase import LoaderBase +from .loaderyaml import LoaderYAML + +from .generatorbase import GeneratorBase +from .generatorprint import GeneratorPrint + +meson_root = Path(__file__).absolute().parents[2] + +def main() -> int: + parser = argparse.ArgumentParser(description='Meson reference manual generator') + parser.add_argument('-l', '--loader', type=str, default='yaml', choices=['yaml'], help='Information loader backend') + parser.add_argument('-g', '--generator', type=str, choices=['print'], required=True, help='Generator backend') + parser.add_argument('--depfile', type=Path, default=None, help='Set to generate a depfile') + parser.add_argument('--force-color', action='store_true', help='Force enable colors') + args = parser.parse_args() + + if args.force_color: + mlog.colorize_console = lambda: True + + loaders: T.Dict[str, T.Callable[[], LoaderBase]] = { + 'yaml': lambda: LoaderYAML(meson_root / 'docs' / 'yaml'), + } + + loader = loaders[args.loader]() + refMan = loader.load() + + generators: T.Dict[str, T.Callable[[], GeneratorBase]] = { + 'print': lambda: GeneratorPrint(refMan), + } + generator = generators[args.generator]() + + # Generate the depfile if required + if args.depfile is not None: + assert isinstance(args.depfile, Path) + assert isinstance(args.out, Path) + + # Also add all files of this package + script_files = list(Path(__file__).resolve().parent.glob('**/*.py')) + templates = list(Path(__file__).resolve().parent.glob('**/*.mustache')) + + out_text = f'{args.out.resolve().as_posix()}: \\\n' + for input in loader.input_files + script_files + templates: + out_text += f' {input.resolve().as_posix():<93} \\\n' + + args.depfile.write_text(out_text, encoding='utf-8') + + generator.generate() + return 0 |