You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
makerst: Add an option to filter which XML classes to output
Usage:
```
# Output `VisualScript` classes only (found in `modules/visual_script`)
python doc/tools/makerst.py "doc/classes" "modules" --filter "visual_script"
# Output CSG classes only (found in `modules/csg`)
python doc/tools/makerst.py "doc/classes" "modules" --filter "csg"
```
(cherry picked from commit 7fcdd15f0c)
This commit is contained in:
committed by
Rémi Verschelde
parent
d91a5e7883
commit
34eea26c67
@@ -110,6 +110,9 @@ class ClassDef:
|
|||||||
self.theme_items = None # type: Optional[OrderedDict[str, List[ThemeItemDef]]]
|
self.theme_items = None # type: Optional[OrderedDict[str, List[ThemeItemDef]]]
|
||||||
self.tutorials = [] # type: List[str]
|
self.tutorials = [] # type: List[str]
|
||||||
|
|
||||||
|
# Used to match the class with XML source for output filtering purposes.
|
||||||
|
self.filepath = "" # type: str
|
||||||
|
|
||||||
|
|
||||||
class State:
|
class State:
|
||||||
def __init__(self): # type: () -> None
|
def __init__(self): # type: () -> None
|
||||||
@@ -118,11 +121,12 @@ class State:
|
|||||||
self.classes = OrderedDict() # type: OrderedDict[str, ClassDef]
|
self.classes = OrderedDict() # type: OrderedDict[str, ClassDef]
|
||||||
self.current_class = "" # type: str
|
self.current_class = "" # type: str
|
||||||
|
|
||||||
def parse_class(self, class_root): # type: (ET.Element) -> None
|
def parse_class(self, class_root, filepath): # type: (ET.Element, str) -> None
|
||||||
class_name = class_root.attrib["name"]
|
class_name = class_root.attrib["name"]
|
||||||
|
|
||||||
class_def = ClassDef(class_name)
|
class_def = ClassDef(class_name)
|
||||||
self.classes[class_name] = class_def
|
self.classes[class_name] = class_def
|
||||||
|
class_def.filepath = filepath
|
||||||
|
|
||||||
inherits = class_root.get("inherits")
|
inherits = class_root.get("inherits")
|
||||||
if inherits is not None:
|
if inherits is not None:
|
||||||
@@ -278,6 +282,7 @@ def parse_arguments(root): # type: (ET.Element) -> List[ParameterDef]
|
|||||||
def main(): # type: () -> None
|
def main(): # type: () -> None
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("path", nargs="+", help="A path to an XML file or a directory containing XML files to parse.")
|
parser.add_argument("path", nargs="+", help="A path to an XML file or a directory containing XML files to parse.")
|
||||||
|
parser.add_argument("--filter", default="", help="The filepath pattern for XML files to filter.")
|
||||||
group = parser.add_mutually_exclusive_group()
|
group = parser.add_mutually_exclusive_group()
|
||||||
group.add_argument("--output", "-o", default=".", help="The directory to save output .rst files in.")
|
group.add_argument("--output", "-o", default=".", help="The directory to save output .rst files in.")
|
||||||
group.add_argument(
|
group.add_argument(
|
||||||
@@ -333,17 +338,21 @@ def main(): # type: () -> None
|
|||||||
print_error("Duplicate class '{}'".format(name), state)
|
print_error("Duplicate class '{}'".format(name), state)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
classes[name] = doc
|
classes[name] = (doc, cur_file)
|
||||||
|
|
||||||
for name, data in classes.items():
|
for name, data in classes.items():
|
||||||
try:
|
try:
|
||||||
state.parse_class(data)
|
state.parse_class(data[0], data[1])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_error("Exception while parsing class '{}': {}".format(name, e), state)
|
print_error("Exception while parsing class '{}': {}".format(name, e), state)
|
||||||
|
|
||||||
state.sort_classes()
|
state.sort_classes()
|
||||||
|
|
||||||
|
pattern = re.compile(args.filter)
|
||||||
|
|
||||||
for class_name, class_def in state.classes.items():
|
for class_name, class_def in state.classes.items():
|
||||||
|
if args.filter and not pattern.search(class_def.filepath):
|
||||||
|
continue
|
||||||
state.current_class = class_name
|
state.current_class = class_name
|
||||||
make_rst_class(class_def, state, args.dry_run, args.output)
|
make_rst_class(class_def, state, args.dry_run, args.output)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user