adding developers

This commit is contained in:
Trilarion
2020-02-10 12:35:22 +01:00
parent eeb20a670a
commit 48ade4bc0b
13 changed files with 345 additions and 14 deletions

View File

@ -15,7 +15,7 @@ class ListingTransformer(lark.Transformer):
raise lark.Discard
def property(self, x):
return (x[0].value, x[1].value)
return (x[0].value.lower(), x[1].value)
def name(self, x):
return ('name', x[0].value)
@ -71,6 +71,8 @@ code_dependencies_without_entry = {'OpenGL': 'https://www.opengl.org/',
regex_sanitize_name = re.compile(r"[^A-Za-z 0-9-+]+")
regex_sanitize_name_space_eater = re.compile(r" +")
valid_developer_fields = ('name', 'games', 'contact', 'organization', 'home')
comment_string = '[comment]: # (partly autogenerated content, edit with care, read the manual before)'
@ -378,7 +380,22 @@ def read_developer_info():
developer_file = os.path.join(c.root_path, 'developer.md')
grammar_file = os.path.join(c.code_path, 'grammar_listing.lark')
transformer = ListingTransformer()
return read_and_parse(developer_file, grammar_file, transformer)
developers = read_and_parse(developer_file, grammar_file, transformer)
# now transform a bit more
for index, dev in enumerate(developers):
for field in dev.keys():
if field not in valid_developer_fields:
raise RuntimeError('Unknown developer field "{}" for developer: {}.'.format(field, dev['name']))
for field in ('name', 'organization'):
if field in dev:
dev[field] = dev[field].strip()
for field in ('games', 'contact'):
if field in dev:
content = dev[field]
content = content.split(',')
content = [x.strip() for x in content]
dev[field] = content
return developers
def write_developer_info(developers):
@ -386,7 +403,38 @@ def write_developer_info(developers):
:return:
"""
# comment
content = '{}\n'.format(comment_string)
# number of developer
content += '# Developer ({})\n\n'.format(len(developers))
# sort by name
developers.sort(key=lambda x: str.casefold(x['name']))
# iterate over them
for dev in developers:
# developer name
content += '## {} ({})\n\n'.format(dev['name'], len(dev['games']))
# games
content += '- Games: {}\n'.format(', '.join(sorted(dev['games'], key=str.casefold)))
# all the remaining in alphabetical order
for field in sorted(dev.keys()):
if field not in ('name', 'games'):
value = dev[field]
field = field.capitalize()
if isinstance(value, str):
content += '- {}: {}\n'.format(field, value)
else:
content += '- {}: {}\n'.format(field, ', '.join(sorted(value, key=str.casefold)))
content += '\n'
# write
developer_file = os.path.join(c.root_path, 'developer.md')
utils.write_text(developer_file, content)
def read_inspirations_info():