[CORD-1569]
Autogenerate documentation of build system variables
Change-Id: I839f46d681e8f6954316f0ea4e9a79395501459f
diff --git a/docs/scripts/markedyaml.py b/docs/scripts/markedyaml.py
new file mode 100644
index 0000000..f7c1484
--- /dev/null
+++ b/docs/scripts/markedyaml.py
@@ -0,0 +1,118 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+# markedyaml.py
+# generates nodes with start/end line and column values
+# start line seems off with single-line items, correct with multiline
+#
+# Original code from here: https://gist.github.com/dagss/5008118
+# Request for licensing clarification made on 2017-09-19
+# Contains improvements to support more types (bool/int/etc.)
+
+import yaml
+from yaml.composer import Composer
+from yaml.reader import Reader
+from yaml.scanner import Scanner
+from yaml.composer import Composer
+from yaml.resolver import Resolver
+from yaml.parser import Parser
+from yaml.constructor import Constructor, BaseConstructor, SafeConstructor
+
+def create_node_class(cls):
+ class node_class(cls):
+ def __init__(self, x, start_mark, end_mark):
+ cls.__init__(self, x)
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+ def __new__(self, x, start_mark, end_mark):
+ return cls.__new__(self, x)
+ node_class.__name__ = '%s_node' % cls.__name__
+ return node_class
+
+dict_node = create_node_class(dict)
+list_node = create_node_class(list)
+unicode_node = create_node_class(unicode)
+int_node = create_node_class(int)
+float_node = create_node_class(float)
+
+class NodeConstructor(SafeConstructor):
+ # To support lazy loading, the original constructors first yield
+ # an empty object, then fill them in when iterated. Due to
+ # laziness we omit this behaviour (and will only do "deep
+ # construction") by first exhausting iterators, then yielding
+ # copies.
+ def construct_yaml_map(self, node):
+ obj, = SafeConstructor.construct_yaml_map(self, node)
+ return dict_node(obj, node.start_mark, node.end_mark)
+
+ def construct_yaml_seq(self, node):
+ obj, = SafeConstructor.construct_yaml_seq(self, node)
+ return list_node(obj, node.start_mark, node.end_mark)
+
+ def construct_yaml_str(self, node):
+ obj = SafeConstructor.construct_scalar(self, node)
+ assert isinstance(obj, unicode)
+ return unicode_node(obj, node.start_mark, node.end_mark)
+
+ def construct_yaml_bool(self, node):
+ obj = SafeConstructor.construct_yaml_bool(self, node)
+ return int_node(obj, node.start_mark, node.end_mark)
+
+ def construct_yaml_int(self, node):
+ obj = SafeConstructor.construct_scalar(self, node)
+ return int_node(obj, node.start_mark, node.end_mark)
+
+ def construct_yaml_float(self, node):
+ obj = SafeConstructor.construct_scalar(self, node)
+ return float_node(obj, node.start_mark, node.end_mark)
+
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:map',
+ NodeConstructor.construct_yaml_map)
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:seq',
+ NodeConstructor.construct_yaml_seq)
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:str',
+ NodeConstructor.construct_yaml_str)
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:bool',
+ NodeConstructor.construct_yaml_bool)
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:int',
+ NodeConstructor.construct_yaml_int)
+
+NodeConstructor.add_constructor(
+ u'tag:yaml.org,2002:float',
+ NodeConstructor.construct_yaml_float)
+
+
+class MarkedLoader(Reader, Scanner, Parser, Composer, NodeConstructor, Resolver):
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ NodeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+def get_data(stream):
+ return MarkedLoader(stream).get_data()
+