aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/.local/share/nvim/site/autoload/airline/extensions/po.vim
blob: 3ec29421baff229e88ff2c5ff773ea9432db8528 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
" vim: et ts=2 sts=2 sw=2

scriptencoding utf-8

function! airline#extensions#po#shorten()
  " Format and shorte the output of msgfmt
  let b:airline_po_stats = substitute(get(b:, 'airline_po_stats', ''), ' \(message\|translation\)s*\.*', '', 'g')
  let b:airline_po_stats = substitute(b:airline_po_stats, ', ', '/', 'g')
  if exists("g:airline#extensions#po#displayed_limit")
    let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
    if len(b:airline_po_stats) > w:displayed_po_limit - 1
      let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 2)].(&encoding==?'utf-8' ? '…' : '.'). ']'
    endif
  endif
  if strlen(get(b:, 'airline_po_stats', '')) >= 30 && winwidth(0) < 150
    let fuzzy = ''
    let untranslated = ''
    let messages = ''
    " Shorten [120 translated, 50 fuzzy, 4 untranslated] to [120T/50F/4U]
    if b:airline_po_stats =~ 'fuzzy'
      let fuzzy = substitute(b:airline_po_stats, '.*\(\d\+\) fuzzy.*', '\1F', '')
    endif
    if b:airline_po_stats =~ 'untranslated'
      let untranslated = substitute(b:airline_po_stats, '.*\(\d\+\) untranslated.*', '\1U', '')
    endif
    let messages = substitute(b:airline_po_stats, '\(\d\+\) translated.*', '\1T', '')
    let b:airline_po_stats = printf('%s%s%s', fuzzy, (empty(fuzzy) || empty(untranslated) ? '' : '/'), untranslated)
    if strlen(b:airline_po_stats) < 8
      let b:airline_po_stats = messages. (!empty(b:airline_po_stats) ? '/':''). b:airline_po_stats
    endif
  endif
  let b:airline_po_stats = '['.b:airline_po_stats. ']'
endfunction

function! airline#extensions#po#on_winenter()
  " only reset cache, if the window size changed
  if get(b:, 'airline_winwidth', 0) != winwidth(0)
    let b:airline_winwidth = winwidth(0)
    " needs re-formatting
    unlet! b:airline_po_stats
  endif
endfunction

function! airline#extensions#po#apply(...)
  if &ft ==# 'po'
    call airline#extensions#prepend_to_section('z', '%{airline#extensions#po#stats()}')
    " Also reset the cache variable, if a window has been split, e.g. the winwidth changed
    autocmd airline BufWritePost * unlet! b:airline_po_stats
    autocmd airline WinEnter * call airline#extensions#po#on_winenter()
  endif
endfunction

function! airline#extensions#po#stats()
  if exists('b:airline_po_stats') && !empty(b:airline_po_stats)
    return b:airline_po_stats
  endif

  let cmd = 'msgfmt --statistics -o /dev/null -- '
  if g:airline#init#vim_async
    call airline#async#get_msgfmt_stat(cmd, expand('%:p'))
  elseif has("nvim")
    call airline#async#nvim_get_msgfmt_stat(cmd, expand('%:p'))
  else
    let airline_po_stats = system(cmd. shellescape(expand('%:p')))
    if v:shell_error
      return ''
    endif
    try
      let b:airline_po_stats = split(airline_po_stats, '\n')[0]
    catch
      let b:airline_po_stats = ''
    endtry
    call airline#extensions#po#shorten()
  endif
  return get(b:, 'airline_po_stats', '')
endfunction

function! airline#extensions#po#init(ext)
    call a:ext.add_statusline_func('airline#extensions#po#apply')
endfunction