]> granicus.if.org Git - vim/commitdiff
patch 8.0.0734: the script to check translations can be improved v8.0.0734
authorBram Moolenaar <Bram@vim.org>
Wed, 19 Jul 2017 12:34:42 +0000 (14:34 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 19 Jul 2017 12:34:42 +0000 (14:34 +0200)
Problem:    The script to check translations can be improved.
Solution:   Restore the view when no errors are found.  Check for matching
            line break at the end of the message. (Christian Brabandt)

src/po/check.vim
src/version.c

index 256c5387d12b4210311102e7367e69b376621e96..ba98ae7aac574d2d2f52237d45abf90562cb845a 100644 (file)
@@ -35,6 +35,7 @@ let s:save_wrapscan = &wrapscan
 set nowrapscan
 
 " Start at the first "msgid" line.
+let wsv = winsaveview()
 1
 /^msgid\>
 
@@ -110,7 +111,43 @@ if search('msgid "\("\n"\)\?\([EW][0-9]\+:\).*\nmsgstr "\("\n"\)\?[^"]\@=\2\@!')
   endif
 endif
 
+func! CountNl(first, last)
+  let nl = 0
+  for lnum in range(a:first, a:last)
+    if getline(lnum) =~ '\\n'
+      let nl += 1
+    endif
+  endfor
+  return nl
+endfunc
+
+" Check that the \n at the end of the msid line is also present in the msgstr
+" line.  Skip over the header.
+/^"MIME-Version:
+while 1
+  let lnum = search('^msgid\>')
+  if lnum <= 0
+    break
+  endif
+  let strlnum = search('^msgstr\>')
+  let end = search('^$')
+  if end <= 0
+    let end = line('$') + 1
+  endif
+  let origcount = CountNl(lnum, strlnum - 1)
+  let transcount = CountNl(strlnum, end - 1)
+  " Allow for a few more or less line breaks when there are 2 or more
+  if origcount != transcount && (origcount <= 2 || transcount <= 2)
+    echomsg 'Mismatching "\\n" in line ' . line('.')
+    if error == 0
+      let error = lnum
+    endif
+  endif
+endwhile
+
 if error == 0
+  " If all was OK restore the view.
+  call winrestview(wsv)
   echomsg "OK"
 else
   exe error
index 49092c6b7d8a780abfc2946697f168387d15aa21..08d365645e5222bc4d764a0f7cba659fe92b3b2c 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    734,
 /**/
     733,
 /**/