Move dot conversion to doc gen pipeline

--
PiperOrigin-RevId: 141913623
MOS_MIGRATED_REVID=141913623
diff --git a/scripts/docs/BUILD b/scripts/docs/BUILD
new file mode 100644
index 0000000..53452e2
--- /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 0000000..c65a15e
--- /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 0000000..306d5e1
--- /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()