From 4d478b0ad0a3cba3ff6cc9b158a4832534b97f81 Mon Sep 17 00:00:00 2001 From: Kevin Lyda <kevin@ie.suberic.net> Date: Tue, 19 Sep 2017 23:20:14 +0100 Subject: [PATCH] Add options. --- doc/{cobol.txt => vim-cobol.txt} | 10 +++- plugin/cobol.py | 94 +++++++++++++++++++------------- 2 files changed, 66 insertions(+), 38 deletions(-) rename doc/{cobol.txt => vim-cobol.txt} (72%) diff --git a/doc/cobol.txt b/doc/vim-cobol.txt similarity index 72% rename from doc/cobol.txt rename to doc/vim-cobol.txt index 2e8c06a..0cde0e1 100644 --- a/doc/cobol.txt +++ b/doc/vim-cobol.txt @@ -18,10 +18,18 @@ Utility functions which work on the entire source file. that are out of order (or that would be after renumbering. - cobol-:Unnumber + cobol-:Unnumber :Unnumber Remove all numbers in columns 1-6; replace with spaces. +SETTINGS cobol-settings + + g:cobol_minimum_delta +Minimum delta to put between lines. Defaults to 1. + + g:cobol_maximum_delta +Maximum delta to put between lines. Defaults to 100. + ABOUT *cobol-about* Grab the latest version or report a bug on GitHub: diff --git a/plugin/cobol.py b/plugin/cobol.py index d1b189e..97b6610 100755 --- a/plugin/cobol.py +++ b/plugin/cobol.py @@ -20,46 +20,66 @@ except NameError: xrange = range def cobol_Renumber(): - if vim.current.buffer.options['filetype'] == b'cobol': - gap = {} - last_line_no = 0 - lines = vim.current.buffer - for i in xrange(len(lines)): - if len(lines[i]) == 0 or lines[i][:6] == ' ': - if not gap: - gap['i'] = i - gap['last_line_no'] = last_line_no - else: - try: - last_line_no = int(lines[i][:6]) - except ValueError: - print('Malformed line - has non-numbers in columns 1-6') - return - if gap: - delta = math.floor((last_line_no - gap['last_line_no']) / - (i - gap['i'] + 1)) - if delta > 1: - new_line_no = gap['last_line_no'] + delta - for j in xrange(gap['i'], i): - lines[j] = ('%06d' % new_line_no) + lines[j][6:] - new_line_no += delta - gap = {} - if gap: - delta = 100 - new_line_no = gap['last_line_no'] + delta - for j in xrange(gap['i'], len(lines)): - lines[j] = ('%06d' % new_line_no) + lines[j][6:] - new_line_no += delta - else: + # Is this COBOL? + if vim.current.buffer.options['filetype'] != b'cobol': print('Not a COBOL file. This is a %s file.' % vim.current.buffer.options['filetype'].decode('UTF-8')) + return + + # Get user configs. + try: + min_delta = int(vim.eval('g:cobol_minimum_delta')) + if min_delta < 1: + min_delta = 1 + except: + min_delta = 1 + try: + max_delta = int(vim.eval('g:cobol_maximum_delta')) + if max_delta < min_delta: + max_delta = max(100, min_delta) + except: + max_delta = max(100, min_delta) + + gap = {} + last_line_no = 0 + lines = vim.current.buffer + + # Look for gaps. + for i in xrange(len(lines)): + if len(lines[i]) == 0 or lines[i][:6] == ' ': + if not gap: + gap['i'] = i + gap['last_line_no'] = last_line_no + else: + try: + last_line_no = int(lines[i][:6]) + except ValueError: + print('Malformed line - has non-numbers in columns 1-6') + return + if gap: + delta = math.floor((last_line_no - gap['last_line_no']) / + (i - gap['i'] + 1)) + if delta > min_delta: + delta = min(delta, max_delta) + new_line_no = gap['last_line_no'] + delta + for j in xrange(gap['i'], i): + lines[j] = ('%06d' % new_line_no) + lines[j][6:] + new_line_no += delta + gap = {} + + # Deal with gap at end of file. + if gap: + new_line_no = gap['last_line_no'] + max_delta + for j in xrange(gap['i'], len(lines)): + lines[j] = ('%06d' % new_line_no) + lines[j][6:] + new_line_no += max_delta def cobol_Unnumber(): - if vim.current.buffer.options['filetype'] == b'cobol': - lines = vim.current.buffer - for i in xrange(len(lines)): - if lines[i][:6].isdigit(): - lines[i] = ' ' + lines[i][6:] - else: + if vim.current.buffer.options['filetype'] != b'cobol': print('Not a COBOL file. This is a %s file.' % vim.current.buffer.options['filetype'].decode('UTF-8')) + + lines = vim.current.buffer + for i in xrange(len(lines)): + if lines[i][:6].isdigit(): + lines[i] = ' ' + lines[i][6:] -- GitLab