// UML for the standard Sphinx build workflow

digraph build {
    graph [
        rankdir=LR
    ];
    node [
        shape=rect
        style=rounded
    ];

    "Sphinx" [
        shape=record
        label = "Sphinx | <init> __init__ | <build> build"
    ];
    "Sphinx":init -> "Builder.init";
    "Sphinx":build -> "Builder.build_all";
    "Sphinx":build -> "Builder.build_specific";
    "Builder.build_update" [
        shape=record
        label = "<p1> Builder.build_update | Builder.get_outdated_docs"
    ];
    "Sphinx":build -> "Builder.build_update":p1 ;

    "Builder.build_all" -> "Builder.build";
    "Builder.build_specific" -> "Builder.build";
    "Builder.build_update":p1 -> "Builder.build";

    "Builder.build" -> "Builder.read";
    "Builder.write" [
        shape=record
        label = "<p1> Builder.write | Builder._write_serial | Builder._write_parallel"
    ];
    "Builder.build" -> "Builder.write";
    "Builder.build" -> "Builder.finish";

    "Builder.read" -> "Builder.read_doc";
    "Builder.read_doc" -> "Builder.write_doctree";

    "Builder.write":p1 -> "Builder.prepare_writing";
    "Builder.write":p1 -> "Builder.copy_assets";
    "Builder.write":p1 -> "Builder.write_doc";

    "Builder.write_doc" -> "Builder.get_relative_uri";

    "Builder.get_relative_uri" -> "Builder.get_target_uri";
}
