123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/usr/bin/env python
- # Copyright (c) OpenMMLab. All rights reserved.
- import os
- import os.path as osp
- import re
- from glob import glob
- def _get_project_docs():
- """Get all project document files.
- Returns:
- list[str]: file paths
- """
- project_root = osp.join('..', '..', 'projects')
- pattern = osp.sep.join(['*'] * 2) + '.md'
- docs = glob(osp.join(project_root, pattern))
- docs = [
- doc for doc in docs
- if 'example_project' not in doc and '_CN' not in doc
- ]
- return docs
- def _parse_project_doc_path(fn):
- """Get project name and banner from a project reference file.
- Returns:
- tuple:
- - project_name (str)
- - project_banner (str)
- """
- project_banner, project_name = None, None
- with open(fn, 'r', encoding='utf-8') as f:
- for line in f.readlines():
- if re.match('^( )*<img', line) and not project_banner:
- project_banner = line
- if line.startswith('# ') and not project_name:
- project_name = line
- if project_name and project_banner:
- break
- if project_name is None or project_banner is None:
- raise ValueError(f'Invalid paper reference file {fn}')
- project_name = re.sub(r'^\# ', '', project_name).strip()
- project_banner = project_banner.strip()
- return project_name, project_banner
- def _get_project_intro_doc():
- project_intro_doc = []
- with open(
- osp.join('..', '..', 'projects', 'README.md'), 'r',
- encoding='utf-8') as f:
- for line in f.readlines():
- if line.startswith('# Welcome'):
- continue
- if './faq.md' in line:
- line = line.replace('./faq.md', '#faq')
- if './' in line:
- line = line.replace('./', '/projects/')
- project_intro_doc.append(line)
- if line.startswith('## Project List'):
- break
- return project_intro_doc
- def _get_faq_doc():
- faq_doc = ['\n']
- with open(
- osp.join('..', '..', 'projects', 'faq.md'), 'r',
- encoding='utf-8') as f:
- for line in f.readlines():
- if '#' in line:
- line = re.sub(r'^\#', '##', line)
- faq_doc.append(line)
- return faq_doc
- def main():
- # Build output folders
- os.makedirs('projects', exist_ok=True)
- # Collect all document contents
- project_doc_list = _get_project_docs()
- project_lines = []
- for path in project_doc_list:
- name, banner = _parse_project_doc_path(path)
- _path = path.split(osp.sep)
- _rel_path = _path[_path.index('projects'):-1]
- url = '/' + '/'.join(_rel_path)
- _name = name.split(':', 1)
- name, description = _name[0], '' if len(
- _name) < 2 else f': {_name[-1]}'
- project_lines += [
- f'- **{name}**{description} [\\[github\\]]({url})', '',
- '<div align="center">', ' ' + banner, '</div>', '<br/>', ''
- ]
- project_intro_doc = _get_project_intro_doc()
- faq_doc = _get_faq_doc()
- with open(
- osp.join('projects', 'community_projects.md'), 'w',
- encoding='utf-8') as f:
- f.write('# Projects from Community Contributors\n')
- f.write(''.join(project_intro_doc))
- f.write('\n'.join(project_lines))
- f.write(''.join(faq_doc))
- if __name__ == '__main__':
- print('collect project documents')
- main()
|