90 lines
2.2 KiB
Python
Executable file
90 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
# This script will parse source files for docstring.
|
|
|
|
import os, codecs
|
|
|
|
|
|
path = os.path.realpath(__file__)
|
|
script = os.path.basename(path)
|
|
d_root = os.path.dirname(os.path.dirname(path))
|
|
d_ldoc = os.path.join(d_root, ".ldoc")
|
|
|
|
|
|
armor_types = {
|
|
"armor": {"topic": "Armors", "values": []},
|
|
"helmet": {"topic": "Helmets", "values": []},
|
|
"chestplate": {"topic": "Chestplates", "values": []},
|
|
"leggings": {"topic": "Leggings", "values": []},
|
|
"boots": {"topic": "Boots", "values": []},
|
|
#"shield": {"topic": "Shields", "values": []},
|
|
}
|
|
|
|
def parse_file(f):
|
|
buffer = codecs.open(f, "r", "utf-8")
|
|
if not buffer:
|
|
print("ERROR: could not open file for reading: {}".format(f))
|
|
return
|
|
|
|
data_in = buffer.read()
|
|
buffer.close()
|
|
|
|
# format to LF (Unix)
|
|
data_in = data_in.replace("\r\n", "\n").replace("\r", "\n")
|
|
|
|
current_item = []
|
|
item_type = None
|
|
new_item = False
|
|
for li in data_in.split("\n"):
|
|
li = li.strip()
|
|
if li.startswith("---"):
|
|
new_item = True
|
|
elif not li.startswith("--"):
|
|
new_item = False
|
|
|
|
if new_item:
|
|
current_item.append(li)
|
|
if not item_type:
|
|
for a_type in armor_types:
|
|
if "@{} ".format(a_type) in li:
|
|
item_type = a_type
|
|
break
|
|
elif item_type and len(current_item):
|
|
armor_types[item_type]["values"].append("\n".join(current_item))
|
|
item_type = None
|
|
current_item = []
|
|
else:
|
|
current_item = []
|
|
|
|
to_parse = []
|
|
|
|
for obj in os.listdir(d_root):
|
|
fullpath = os.path.join(d_root, obj)
|
|
if not obj.startswith(".") and os.path.isdir(fullpath):
|
|
for root, dirs, files in os.walk(fullpath):
|
|
for f in files:
|
|
if f.endswith(".lua"):
|
|
to_parse.append(os.path.join(root, f))
|
|
|
|
for p in to_parse:
|
|
if not os.path.isfile(p):
|
|
print("ERROR: {} is not a file".format(p))
|
|
else:
|
|
parse_file(p)
|
|
|
|
for t in armor_types:
|
|
topic = armor_types[t]["topic"]
|
|
items = armor_types[t]["values"]
|
|
|
|
if len(items):
|
|
outfile = os.path.join(d_ldoc, "{}.luadoc".format(topic.lower()))
|
|
|
|
buffer = codecs.open(outfile, "w", "utf-8")
|
|
if not buffer:
|
|
print("ERROR: could not open file for writing: {}".format(outfile))
|
|
continue
|
|
|
|
buffer.write("\n--- 3D Armor {}\n--\n-- @topic {}\n\n\n{}\n".format(topic, topic.lower(), "\n\n".join(items)))
|
|
buffer.close()
|
|
|
|
print("{} exported to\t{}".format(topic.lower(), outfile))
|