aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/docs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/docs')
-rw-r--r--scripts/docs/BUILD17
-rw-r--r--scripts/docs/dot_converter.py56
-rw-r--r--scripts/docs/generate_dot_graphs.py23
3 files changed, 96 insertions, 0 deletions
diff --git a/scripts/docs/BUILD b/scripts/docs/BUILD
new file mode 100644
index 0000000000..53452e22e0
--- /dev/null
+++ b/scripts/docs/BUILD
@@ -0,0 +1,17 @@
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//scripts:__pkg__"],
+)
+
+py_library(
+ name = "dot-converter",
+ srcs = ["dot_converter.py"],
+)
+
+py_binary(
+ name = "generate_dot_graphs",
+ srcs = ["generate_dot_graphs.py"],
+ visibility = ["//site:__pkg__"],
+ deps = [":dot-converter"],
+)
diff --git a/scripts/docs/dot_converter.py b/scripts/docs/dot_converter.py
new file mode 100644
index 0000000000..c65a15e175
--- /dev/null
+++ b/scripts/docs/dot_converter.py
@@ -0,0 +1,56 @@
+# Copyright 2016 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Graphviz documentation converter library."""
+
+import fileinput
+import re
+import subprocess
+import sys
+
+
+class DotConverter(object):
+ """Converts dot graphs to SVG format inline."""
+
+ def __init__(self, dot_command, dot_env):
+ self.dot_command = dot_command
+ self.dot_env = dot_env
+
+ def convert(self):
+ collect = False
+ graph = ""
+ block_num = 0
+
+ for line in fileinput.input():
+ if re.search(r"div class='graphviz dot'><!--", line):
+ collect = True
+ continue
+ elif collect and re.search(r"--></div>", line):
+ dot = subprocess.Popen(
+ self.dot_command,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE, env=self.dot_env)
+ output = dot.communicate(graph)[0]
+ if dot.returncode == 0:
+ # cut the first few lines (svg header + comments)
+ sys.stdout.write(output.split("\n", 6)[6])
+ else:
+ sys.stderr.write("inlining block %d failed.\n" % (block_num + 1))
+ collect = False
+ graph = ""
+ block_num += 1
+ continue
+
+ if collect:
+ graph += line
+ else:
+ sys.stdout.write(line)
diff --git a/scripts/docs/generate_dot_graphs.py b/scripts/docs/generate_dot_graphs.py
new file mode 100644
index 0000000000..306d5e12b0
--- /dev/null
+++ b/scripts/docs/generate_dot_graphs.py
@@ -0,0 +1,23 @@
+# Copyright 2016 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Converts dot graphs in an .html file SVG format."""
+
+import os
+
+from scripts.docs.dot_converter import DotConverter
+
+if __name__ == "__main__":
+ converter = DotConverter(["dot", "-Tsvg"], os.environ.copy())
+ converter.convert()