Skip to content

Instantly share code, notes, and snippets.

@MarioMey
Last active October 10, 2021 05:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarioMey/a291fe6d0c9781122b8345247c001f4d to your computer and use it in GitHub Desktop.
Save MarioMey/a291fe6d0c9781122b8345247c001f4d to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import re
class Color:
def __init__(self):
self.reset = '\x1b[0m'
self.blanco = '\x1b[97m'
self.negro = '\x1b[90m'
self.rojo = '\x1b[91m'
self.verde = '\x1b[92m'
self.azul = '\x1b[94m'
self.amarillo = '\x1b[93m'
self.magenta = '\x1b[95m'
self.magenta_bold = '\x1b[95;1m'
self.azul_bold = '\x1b[94;1m'
self.cian = '\x1b[96m'
self.naranja = '\x1b[38;5;202m'
self.violeta = '\x1b[38;5;129m'
self.rosa = '\x1b[38;5;213m'
self.ocre = '\x1b[38;5;172m'
self.marron = '\x1b[38;5;52m'
self.musgo = '\x1b[38;5;58m'
self.error = '\x1b[93;41m'
self.remoto = '\x1b[93;42m'
self.debug = '\x1b[93;44m'
c = Color()
# Just for test
pytext = '''
def obs_sceneitem_set_crop(item: "obs_sceneitem_t *", crop: "obs_sceneitem_crop") -> "void":
return _obspython.obs_sceneitem_set_crop(item, crop)
def obs_sceneitem_get_crop(item: "obs_sceneitem_t const *", crop: "obs_sceneitem_crop") -> "void":
return _obspython.obs_sceneitem_get_crop(item, crop)
def obs_sceneitem_set_scale_filter(item: "obs_sceneitem_t *", filter: "enum obs_scale_type") -> "void":
return _obspython.obs_sceneitem_set_scale_filter(item, filter)
'''
# Just for test
rsttext = '''
---------------------
.. function:: void obs_sceneitem_set_crop(obs_sceneitem_t *item, const struct obs_sceneitem_crop *crop)
void obs_sceneitem_get_crop(const obs_sceneitem_t *item, struct obs_sceneitem_crop *crop)
Sets/gets the cropping of the scene item.
---------------------
.. function:: void obs_sceneitem_set_scale_filter(obs_sceneitem_t *item, enum obs_scale_type filter)
enum obs_scale_type obs_sceneitem_get_scale_filter( obs_sceneitem_t *item)
Sets/gets the scale filter used for the scene item.
:param filter: | Can be one of the following values:
| OBS_SCALE_DISABLE
| OBS_SCALE_POINT
| OBS_SCALE_BICUBIC
| OBS_SCALE_BILINEAR
| OBS_SCALE_LANCZOS
---------------------
'''
# Open obspython.py (comment these 2 lines for using test strings)
with open('/home/mariomey/apps/obs-010/data/obs-scripting/64bit/obspython_original.py', 'r') as pyfile:
pytext = pyfile.read()
# Function's First Line List
# First Line Regex
flre = re.compile(r'def [\w\_]*\([^\n]*', re.M)
# Just Function name Regex
fre = re.compile(r'def ([\w\_]*)\(', re.M)
fl_ = re.findall(flre, pytext)
fl = [[re.findall(fre, f)[0] ,f] for f in fl_ if '__init__' not in f]
# Open rst file (documentation) (comment these 2 lines for using test strings)
with open('/home/mariomey/src/obs-studio/docs/sphinx/reference-scenes.rst', 'r') as rstfile_scenes:
rsttext_scenes = rstfile_scenes.read()
# Documentation of functions in rst file
dre = re.compile(r'^\.\. function::(?:.*\n)*?(?=\n-{21}$)', re.M)
d_ = re.findall(dre, rsttext_scenes)
d = list()
for doc in d_:
# Replace some words
doc = doc.replace('.. function::',' ')
doc = doc.replace(':param','Parameter')
doc = doc.replace(':return:','Returns:')
# Adds 4 spaces before every line
doc_ = doc.split('\n')
aux_d_ = list()
for line in doc_:
aux_d_.append(f' {line}\n')
d.append(''.join(aux_d_))
# For every function in Functions list (and First Line)
for func_line in fl:
# For every documentation in Docs list
for doc in d:
# If the name of the function is in documentation
if func_line[0] in doc:
# Some prints: function, function's first line, documentation
print(c.azul, func_line[0], sep='')
print(c.amarillo, func_line[1], sep='')
print(c.rojo, doc, sep='')
# Adds documentation after function first line
idx = pytext.index(func_line[1])
pytext = f'{pytext[:idx + len(func_line[1])]}\n """\n{doc} """{pytext[idx + len(func_line[1]):]}'
# Print entire file
print(c.verde, pytext)
# Write new file
with open('/home/mariomey/apps/obs-010/data/obs-scripting/64bit/obspython.py', 'w') as newpyfile:
newpyfile.write(pytext)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment