po.vim 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. " MIT License. Copyright (c) 2013-2021 Bailey Ling, Christian Brabandt et al.
  2. " vim: et ts=2 sts=2 sw=2
  3. scriptencoding utf-8
  4. function! airline#extensions#po#shorten()
  5. " Format and shorte the output of msgfmt
  6. let b:airline_po_stats = substitute(get(b:, 'airline_po_stats', ''), ' \(message\|translation\)s*\.*', '', 'g')
  7. let b:airline_po_stats = substitute(b:airline_po_stats, ', ', '/', 'g')
  8. if exists("g:airline#extensions#po#displayed_limit")
  9. let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
  10. if len(b:airline_po_stats) > w:displayed_po_limit - 1
  11. let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 2)].(&encoding==?'utf-8' ? '…' : '.')
  12. endif
  13. endif
  14. if strlen(get(b:, 'airline_po_stats', '')) >= 30 && airline#util#winwidth() < 150
  15. let fuzzy = ''
  16. let untranslated = ''
  17. let messages = ''
  18. " Shorten [120 translated, 50 fuzzy, 4 untranslated] to [120T/50F/4U]
  19. if b:airline_po_stats =~ 'fuzzy'
  20. let fuzzy = substitute(b:airline_po_stats, '.\{-}\(\d\+\) fuzzy.*', '\1F', '')
  21. if fuzzy == '0F'
  22. let fuzzy = ''
  23. endif
  24. endif
  25. if b:airline_po_stats =~ 'untranslated'
  26. let untranslated = substitute(b:airline_po_stats, '.\{-}\(\d\+\) untranslated.*', '\1U', '')
  27. if untranslated == '0U'
  28. let untranslated = ''
  29. endif
  30. endif
  31. let messages = substitute(b:airline_po_stats, '\(\d\+\) translated.*', '\1T', '')
  32. if messages ==# '0T'
  33. let messages = ''
  34. endif
  35. let b:airline_po_stats = printf('%s%s%s', fuzzy, (empty(fuzzy) || empty(untranslated) ? '' : '/'), untranslated)
  36. if strlen(b:airline_po_stats) < 10
  37. let b:airline_po_stats = messages. (!empty(b:airline_po_stats) && !empty(messages) ? '/':''). b:airline_po_stats
  38. endif
  39. endif
  40. let b:airline_po_stats = '['.b:airline_po_stats. '] '
  41. endfunction
  42. function! airline#extensions#po#on_winenter()
  43. if !exists('#airline')
  44. " airline disabled
  45. return
  46. endif
  47. " only reset cache, if the window size changed
  48. if get(b:, 'airline_winwidth', 0) != airline#util#winwidth()
  49. let b:airline_winwidth = airline#util#winwidth()
  50. " needs re-formatting
  51. unlet! b:airline_po_stats
  52. endif
  53. endfunction
  54. function! s:autocmd_handler()
  55. if exists('#airline')
  56. unlet! b:airline_po_stats
  57. endif
  58. endfunction
  59. function! airline#extensions#po#apply(...)
  60. if &ft ==# 'po'
  61. call airline#extensions#prepend_to_section('z', '%{airline#extensions#po#stats()}')
  62. " Also reset the cache variable, if a window has been split, e.g. the winwidth changed
  63. autocmd airline BufWritePost * call s:autocmd_handler()
  64. autocmd airline WinEnter * call airline#extensions#po#on_winenter()
  65. endif
  66. endfunction
  67. function! airline#extensions#po#stats()
  68. if exists('b:airline_po_stats') && !empty(b:airline_po_stats)
  69. return b:airline_po_stats
  70. endif
  71. " Write stdout to null because we only want to see warnings.
  72. if g:airline#init#is_windows
  73. let cmd = 'msgfmt --statistics -o /NUL '
  74. else
  75. let cmd = 'msgfmt --statistics -o /dev/null -- '
  76. endif
  77. if g:airline#init#vim_async
  78. call airline#async#get_msgfmt_stat(cmd, expand('%:p'))
  79. elseif has("nvim")
  80. call airline#async#nvim_get_msgfmt_stat(cmd, expand('%:p'))
  81. else
  82. let airline_po_stats = system(cmd. shellescape(expand('%:p')))
  83. if v:shell_error
  84. return ''
  85. endif
  86. try
  87. let b:airline_po_stats = split(airline_po_stats, '\n')[0]
  88. catch
  89. let b:airline_po_stats = ''
  90. endtry
  91. call airline#extensions#po#shorten()
  92. endif
  93. return get(b:, 'airline_po_stats', '')
  94. endfunction
  95. function! airline#extensions#po#init(ext)
  96. call a:ext.add_statusline_func('airline#extensions#po#apply')
  97. endfunction