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