53 lines
2.4 KiB
Python
53 lines
2.4 KiB
Python
# BGRABitmap Assistant: https://chat.openai.com/g/g-FO7aiutRx-bgrabitmap-assistant
|
|
# This program extracts method signatures in BGRABitmap to help provide accurate examples
|
|
|
|
import os
|
|
import re
|
|
|
|
def gather_method_signatures(source_dir):
|
|
print("Source directory:", source_dir)
|
|
regexMethod = r"(?P<proc_or_fun>procedure|function)\s+(?P<class>\w+)\.(?P<method>\w+)(\((?P<parameters>[^)]*)\))?(:(?P<return_type>[^;]+))?;"
|
|
patternMethod = re.compile(regexMethod)
|
|
signatures = []
|
|
classes = set()
|
|
|
|
for root, dirs, files in os.walk(source_dir):
|
|
for file in files:
|
|
if file.endswith('.pas') or file.endswith('.inc'):
|
|
print("Source file:", file)
|
|
with open(os.path.join(root, file), 'r') as source_file:
|
|
content = source_file.read()
|
|
matches = patternMethod.finditer(content)
|
|
|
|
for match in matches:
|
|
proc_or_fun = match.group('proc_or_fun')
|
|
class_name = match.group('class')
|
|
method_name = match.group('method')
|
|
parameters = match.group('parameters')
|
|
if parameters is None:
|
|
parameters = ""
|
|
else:
|
|
parameters = re.sub(r'\s', '', parameters).replace(':', ': ').replace(';', '; ')
|
|
return_type = match.group('return_type')
|
|
if return_type is None:
|
|
return_type = ""
|
|
else:
|
|
return_type = return_type.strip()
|
|
method_signature = f'{proc_or_fun} {class_name}.{method_name}({parameters})'
|
|
if proc_or_fun == "function":
|
|
method_signature += f': {return_type}'
|
|
signatures.append(f"{method_signature}; {{in {file}}}")
|
|
classes.add(class_name)
|
|
return signatures, classes
|
|
|
|
app_directory = os.path.dirname(__file__)
|
|
source_directory = os.path.join(app_directory, '../../bgrabitmap')
|
|
signatures, classes = gather_method_signatures(source_directory)
|
|
target_file = os.path.join(app_directory, 'all.pas')
|
|
with open(target_file, "w") as file:
|
|
for line in signatures:
|
|
file.write(line + "\n")
|
|
target_file = os.path.join(app_directory, 'all_classes.txt')
|
|
with open(target_file, "w") as file:
|
|
file.write(", ".join(classes))
|