Beispiel #1
0
    def indent_code(self, code):
        """Accepts a string of code or a list of code lines"""

        if isinstance(code, basestring):
           code_lines = self.indent_code(code.splitlines(True))
           return ''.join(code_lines)

        tab = "   "
        inc_token = ('{', '(', '{\n', '(\n')
        dec_token = ('}', ')')

        code = [ line.lstrip(' \t') for line in code ]

        from sympy.utilities.iterables import any  # 2.4 support
        increase = [ int(any(map(line.endswith, inc_token))) for line in code ]
        decrease = [ int(any(map(line.startswith, dec_token))) for line in code ]

        pretty = []
        level = 0
        for n, line in enumerate(code):
            if line == '' or line == '\n':
                pretty.append(line)
                continue
            level -= decrease[n]
            pretty.append("%s%s" % (tab*level, line))
            level += increase[n]
        return pretty
Beispiel #2
0
    def indent_code(self, code):
        """Accepts a string of code or a list of code lines"""
        if isinstance(code, basestring):
            code_lines = self.indent_code(code.splitlines(True))
            return ''.join(code_lines)

        free = self._settings['source_format'] == 'free'
        code = [line.lstrip(' \t') for line in code]

        inc_keyword = ('do ', 'if(', 'if ', 'do\n', 'else')
        dec_keyword = ('end do', 'enddo', 'end if', 'endif', 'else')

        from sympy.utilities.iterables import any  # 2.4 support
        increase = [
            int(any(map(line.startswith, inc_keyword))) for line in code
        ]
        decrease = [
            int(any(map(line.startswith, dec_keyword))) for line in code
        ]
        continuation = [
            int(any(map(line.endswith, ['&', '&\n']))) for line in code
        ]

        level = 0
        cont_padding = 0
        tabwidth = 3
        new_code = []
        for i, line in enumerate(code):
            if line == '' or line == '\n':
                new_code.append(line)
                continue
            level -= decrease[i]

            if free:
                padding = " " * (level * tabwidth + cont_padding)
            else:
                padding = " " * level * tabwidth

            line = "%s%s" % (padding, line)
            if not free:
                line = self._pad_leading_columns([line])[0]

            new_code.append(line)

            if continuation[i]:
                cont_padding = 2 * tabwidth
            else:
                cont_padding = 0
            level += increase[i]

        if not free:
            return self._wrap_fortran(new_code)
        return new_code
Beispiel #3
0
    def indent_code(self, code):
        """Accepts a string of code or a list of code lines"""
        if isinstance(code, basestring):
            code_lines = self.indent_code(code.splitlines(True))
            return ''.join(code_lines)

        free = self._settings['source_format'] == 'free'
        code = [ line.lstrip(' \t') for line in code ]

        inc_keyword = ('do ', 'if(', 'if ', 'do\n', 'else')
        dec_keyword = ('end do', 'enddo', 'end if', 'endif', 'else')

        from sympy.utilities.iterables import any  # 2.4 support
        increase = [ int(any(map(line.startswith, inc_keyword))) for line in code ]
        decrease = [ int(any(map(line.startswith, dec_keyword))) for line in code ]
        continuation = [ int(any(map(line.endswith, ['&', '&\n']))) for line in code ]

        level = 0
        cont_padding = 0
        tabwidth = 3
        new_code = []
        for i, line in enumerate(code):
            if line == '' or line == '\n':
                new_code.append(line)
                continue
            level -= decrease[i]

            if free:
                padding = " "*(level*tabwidth + cont_padding)
            else:
                padding = " "*level*tabwidth

            line = "%s%s" % (padding, line)
            if not free:
                line = self._pad_leading_columns([line])[0]

            new_code.append(line)

            if continuation[i]:
                cont_padding = 2*tabwidth
            else:
                cont_padding = 0
            level += increase[i]

        if not free:
            return self._wrap_fortran(new_code)
        return new_code