-
Notifications
You must be signed in to change notification settings - Fork 7
/
readme-resource-updater.py
164 lines (109 loc) · 4.06 KB
/
readme-resource-updater.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# import os
# import re
from glob import glob
from os import path
from re import sub, findall
# Entry point
def main():
# Load a single file
def Load(filename):
if path.exists(filename):
try:
file = open(filename, 'r')
text = file.read()
file.close()
return text
except OSError:
raise Exception(filename + ' could not be read')
else:
raise Exception(filename + ' does not exist')
# Save a single file
def Save(filename, data):
try:
file = open(filename, 'w')
file.write(data)
file.close()
print('Updated ' + filename)
except OSError:
raise Exception(filename + ' could not be written')
# Format URLs in Markdown
def FormatUrls(code):
return sub(r'(https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)', r'[Link](\1)', code)
# Remove whitespace from a comment
def RemoveWhitespace(code):
return sub(r'\n[\t ]*', r'\\\n', code)
# Remove garbage character from a comment
# def StripUselessCharacters(code, regex_1):
# return sub(regex_1, '', # Remove last backslash, comment escape chars, and whitespace
# sub(r'\n[\t ]*', r'\\\n', code) # Remove whitespace
# )
# Extract resources from code
# def ParseResources(code, regex_1, regex_2):
# return list(
# map(
# lambda resource: '- ' + FormatUrls(StripUselessCharacters(code, regex_1)), findall(regex_2, code) # Find comments
# )
# )
# Extract resources from code
def ParseJavaResources(code):
# return ParseResources(code, r'(?:\/{3}.*\n[\t ]*){2,3}', r'(?:[\t ]*\/{3}[\t ]*|\\$)')
return list(
map(
lambda resource: '- ' +
FormatUrls(
sub(r'(?:[\t ]*\/{3}[\t ]*|\\$)', '', # Remove last backslash, comment escape chars, and whitespace
RemoveWhitespace(resource)
)
),
findall(r'(?:\/{3}.*\n[\t ]*){1,3}', code) # Find comments
)
)
# Extract resources from code
def ParseResResources(code):
# return ParseResources(code, r'(?:<!---.*\n[\t ]*){2,3}', r'(?:[\t ]*<!---[\t ]*|[\t ]*--->|\\$)')
return list(
map(
lambda resource: '- ' +
FormatUrls(
sub(r'(?:[\t ]*<!---[\t ]*|[\t ]*-->|\\$)', '', # Remove last backslash, comment escape chars, and whitespace
RemoveWhitespace(resource)
)
),
findall(r'(?:<!---.*\n[\t ]*){1,3}', code) # Find comments
)
)
# Join list items into a string
def Concatenate(resource_list):
return '\n'.join(resource_list)
# Add resources to readme file
def ReplaceReadmeText(readme, resources_string):
return sub(r'## Resources\n((?:.*\n)*)#', '## Resources\n' + resources_string + '\n\n#', readme)
# Get comments from all Java files
def CollectJavaCode(package_directory):
code_list = []
for file_name in glob('app/src/main/java/' + package_directory + '/*.java'):
code_list.append(Load(file_name))
return Concatenate(code_list)
# Get comments from all Java files
def CollectResCode(package_directory):
code_list = []
path_start = 'app/src/main/res/'
path_end = '/*.xml'
file_name_list = glob(path_start + 'drawable' + path_end)
file_name_list.extend(glob(path_start + 'drawable-24' + path_end))
file_name_list.extend(glob(path_start + 'layout' + path_end))
file_name_list.extend(glob(path_start + 'mipmap-anydpi-v26' + path_end))
file_name_list.extend(glob(path_start + 'values' + path_end))
for file_name in file_name_list:
code_list.append(Load(file_name))
return Concatenate(code_list)
# Join all resources into one string
def JoinResources(package_directory):
resource_list = ParseJavaResources(CollectJavaCode(package_directory))
resource_list.extend(ParseResResources(CollectResCode(package_directory)))
return Concatenate(set(resource_list))
readme_name = 'README.md'
package_directory = 'com/CMPUT301W20T24/OnMyWay'
# print(JoinResources(package_directory))
Save(readme_name, ReplaceReadmeText(Load(readme_name), JoinResources(package_directory)))
main()