Bug#611544: ftplugin/po.vim: Patch to enhance handling of fuzzy strings with --previous msgid in po files

Andrei POPESCU andreimpopescu at gmail.com
Sun Jan 30 15:46:49 UTC 2011


Package: vim-scripts
Version: 20091011
Severity: wishlist
Tags: patch

Hello,

I tried to contact the upstream author regarding this patch, but I got 
no response. The diff part needs more work.

[sniped irrelevant system info]

Thanks,
Andrei
-------------- next part --------------
--- /usr/share/vim-scripts/ftplugin/po.vim	2009-10-11 19:24:05.000000000 +0300
+++ .vim/ftplugin/po.vim	2011-01-30 17:39:35.000000000 +0200
@@ -1,8 +1,8 @@
 " Vim ftplugin for PO file (GNU gettext) editing.
 " Maintainer:	Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last Change:	Tue, 12 Apr 2005 13:49:55 -0400
+" Last Change:	Tue, 30 Jan 2011 17:25:32 +0200
 "
-" *** Latest version: http://www.vim.org/scripts/script.php?script_id=695 ***
+" *** Based on the version at: http://www.vim.org/scripts/script.php?script_id=695 ***
 "
 " DESCRIPTION
 "     This file is a Vim ftplugin for editing PO files (GNU gettext -- the GNU
@@ -19,7 +19,7 @@
 "     Move to the next fuzzy translation              <S-F5>      \f
 "     Move to the previous fuzzy translation          <S-F6>      \b
 "     Label the translation fuzzy                     <S-F7>      \z
-"     Remove the fuzzy label                          <S-F8>      \r
+"     Remove the fuzzy label and previous msgid       <S-F8>      \r
 "     Show msgfmt statistics for the file(*)          <S-F11>     \s
 "     Browse through msgfmt errors for the file(*)    <S-F12>     \e
 "     Put the translator info in the header           \t          \t
@@ -36,7 +36,7 @@
 "     Move to the next fuzzy translation              <S-F5>      \f
 "     Move to the previous fuzzy translation          <S-F6>      \b
 "     Label the translation fuzzy                     <S-F7>      \z
-"     Remove the fuzzy label                          <S-F8>      \r
+"     Remove the fuzzy label and previous msgid       <S-F8>      \r
 "     Split-open the file under cursor                  gf        gf
 "     Show msgfmt statistics for the file(*)          <S-F11>     \s
 "     Browse through msgfmt errors for the file(*)    <S-F12>     \e
@@ -45,6 +45,10 @@
 "     ---------------------------------------------------------------
 "     (*) Only available on UNIX computers.
 "
+"     Command
+"     ===============================================================
+"     Use a hidden buffer to highlight changes        :DiffMsgid
+"
 "     Remarks:
 "     - "S" in the above key mappings stands for the <Shift> key and "\" in
 "       fact means "<LocalLeader>" (:help <LocalLeader>), which is "\" by
@@ -69,6 +73,10 @@
 "       program via the global variable 'g:po_msgfmt_args'. All arguments are
 "       allowed except the "-o" for output file. The default value is
 "       "-vv?-c".
+"     - The :DiffMsgid command works only if --previous was used with msgmerge
+"       (or equivalent options in other .po tools).
+"       TODO
+"       The substitute does not work for strings that are only one line
 "
 "     But there's even more!
 "
@@ -212,7 +220,7 @@
    endwhile
 endf
 
-" Remove fuzzy description from the translation.
+" Remove previous msgid and fuzzy flag.
 if !hasmapto('<Plug>RemoveFuzzy')
    if gui
       imap <buffer> <unique> <S-F8> <Plug>RemoveFuzzy
@@ -222,16 +230,12 @@
       nmap <buffer> <unique> <LocalLeader>r <Plug>RemoveFuzzy
    endif
 endif
-inoremap <buffer> <unique> <Plug>RemoveFuzzy <ESC>{vap:call <SID>RemoveFuzzy()<CR>i
-nnoremap <buffer> <unique> <Plug>RemoveFuzzy {vap:call <SID>RemoveFuzzy()<CR>
+inoremap <buffer> <unique> <Plug>RemoveFuzzy <ESC>{vap:call <SID>RemoveFuzzy()<CR>gv<ESC>}i
+nnoremap <buffer> <unique> <Plug>RemoveFuzzy {vap:call <SID>RemoveFuzzy()<CR>gv<ESC>}
 
-fu! <SID>RemoveFuzzy()
-   let line = getline(".")
-   if line =~ '^#,\s*fuzzy$'
-      exe "normal! dd"
-   elseif line =~ '^#,\(.*,\)\=\s*fuzzy'
-      exe 's/,\s*fuzzy//'
-   endif
+fu! <SID>RemoveFuzzy() range
+   execute ':''<,''>global/^#,\sfuzzy$\|^#|\s.*".*"$/d'
+   execute ':''<,''>s/,\s*fuzzy//e'
 endf
 
 " Show PO translation statistics. (Only available on UNIX computers for now.)
@@ -404,4 +408,33 @@
    endif
 endf
 
+" This copies everything to a new, hidden buffer, so we can use the builtin
+" diff capabilities of vim. Built on an idea of J?rgen Kr?mer from the vim
+" users mailing list
+fu! DiffPreviousString()
+    %yank
+    new
+    put!
+    " this replaces the current msgid with the old one, so that diff
+    " can highlight the changes. Currently doesn't work with
+    " msgids that are only in one (the first) line
+    " example:
+    " ------------------------
+    " #, fuzzy 
+    " #| msgid "previous text"
+    " msgid "new text"
+    " msgstr "translation"
+    "
+    " ------------------------
+    %s/^\(#| msgid ""\n\(\_.\{-\}\n\)msgid ""\n\)\(\_.\{-\}\n\)\(msgstr ""\)/\=submatch(1).substitute(submatch(2), '#| ', '', 'g').submatch(4)/
+    nohls
+    diffthis
+    hide
+    diffthis
+    set fdc=0
+    set nofen
+endf
+
+command DiffMsgid call DiffPreviousString()
+
 unlet gui


More information about the pkg-vim-maintainers mailing list