Skip to content

Instantly share code, notes, and snippets.

@sayanchowdhury
Created January 18, 2024 10:32
Show Gist options
  • Select an option

  • Save sayanchowdhury/5955d40a1395c65c433e680f1c171b12 to your computer and use it in GitHub Desktop.

Select an option

Save sayanchowdhury/5955d40a1395c65c433e680f1c171b12 to your computer and use it in GitHub Desktop.
collate-package-names
import regex as re
def parse_version(data):
pattern = re.compile(r'\[([^][]+)\](\(((?:[^()]+|(?2))+)\))')
versions = []
for match in pattern.finditer(data):
description, _, url = match.groups()
versions.append((description, url))
return versions
def parse_package(data):
package = data.strip(' -').split(' ')
if package[0].endswith(':'):
p = ' '.join([package[0], package[1]])
else:
p = package[0]
return p
with open ('x.md') as fobj:
data = fobj.read()
payload = {}
data = data.strip().split('\n')
for elem in data:
versions = parse_version(elem)
package = parse_package(elem)
if package not in payload:
payload[package] = []
payload[package].extend(versions)
single = '[{}]({})'
one = '{} ([{}]({}))'
multiple = '{} ([{}]({}) (includes {}))'
render = []
for key, value in payload.items():
value = sorted(value, key = lambda x: x[0], reverse=True)
if len(value) == 1:
render.append(one.format(key, value[0][0], value[0][1]))
continue
old_single = []
for elem in value[1:]:
old_single.append(single.format(elem[0], elem[1]))
old = ', '.join(old_single)
render.append(multiple.format(key, value[0][0], value[0][1], old))
render = ['- ' + i for i in render]
print('\n'.join(render))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment