X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ea493595cfebbf988877e9de85ffc56a01e3f46e..b31da7a1c205fdc49fcbef81a505fd2248e8b152:/docs/source/_ext/javasphinx/javasphinx/util.py diff --git a/docs/source/_ext/javasphinx/javasphinx/util.py b/docs/source/_ext/javasphinx/javasphinx/util.py new file mode 100644 index 0000000000..2de85d5499 --- /dev/null +++ b/docs/source/_ext/javasphinx/javasphinx/util.py @@ -0,0 +1,119 @@ +# +# Copyright 2012-2015 Bronto Software, Inc. and contributors +# +# 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. +# + +from __future__ import unicode_literals +from builtins import str + +import logging +import re +import sys + +class StringBuilder(list): + def build(self): + return str(self) + + def __str__(self): + return ''.join(self) + +class Directive(object): + + def __init__(self, type, argument=''): + self.type = type + self.argument = argument + + self.options = [] + self.content = [] + + def add_option(self, name, value=''): + self.options.append((name, value)) + + def add_content(self, o): + assert o is not None + self.content.append(o) + + def build(self): + doc = Document() + doc.add_line('.. %s:: %s' % (self.type, self.argument)) + + for name, value in self.options: + doc.add_line(' :%s: %s\n' % (name, value)) + + content = Document() + + for obj in self.content: + content.add_object(obj) + + doc.clear() + for line in content.build().splitlines(): + doc.add_line(' ' + line) + doc.clear() + + return doc.build() + +class Document(object): + remove_trailing_whitespace_re = re.compile('[ \t]+$', re.MULTILINE) + collapse_empty_lines_re = re.compile('\n' + '{3,}', re.DOTALL) + + def __init__(self): + self.content = [] + + def add_object(self, o): + assert o is not None + + self.content.append(o) + + def add(self, s): + self.add_object(s) + + def add_line(self, s): + self.add(s) + self.add('\n') + + def add_heading(self, s, t='-'): + self.add_line(s) + self.add_line(t * len(s)) + + def clear(self): + self.add('\n\n') + + def build(self): + output = StringBuilder() + + for obj in self.content: + if isinstance(obj, Directive): + output.append('\n\n') + output.append(obj.build()) + output.append('\n\n') + elif isinstance(obj, Document): + output.append(obj.build()) + else: + output.append(str(obj)) + + output.append('\n\n') + + output = str(output) + output = self.remove_trailing_whitespace_re.sub('', output) + output = self.collapse_empty_lines_re.sub('\n\n', output) + + return output + +def error(s, *args, **kwargs): + logging.error(s, *args, **kwargs) + sys.exit(1) + +def unexpected(s, *args, **kwargs): + logging.exception(s, *args, **kwargs) + sys.exit(1)