mirror of https://github.com/open-mmlab/mmpose
117 lines
3.4 KiB
Python
117 lines
3.4 KiB
Python
#!/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()
|