| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- " MIT License. Copyright (c) 2013-2021 Bailey Ling, Christian Brabandt 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 && airline#util#winwidth() < 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', '')
- if fuzzy == '0F'
- let fuzzy = ''
- endif
- endif
- if b:airline_po_stats =~ 'untranslated'
- let untranslated = substitute(b:airline_po_stats, '.\{-}\(\d\+\) untranslated.*', '\1U', '')
- if untranslated == '0U'
- let untranslated = ''
- endif
- endif
- let messages = substitute(b:airline_po_stats, '\(\d\+\) translated.*', '\1T', '')
- if messages ==# '0T'
- let messages = ''
- endif
- let b:airline_po_stats = printf('%s%s%s', fuzzy, (empty(fuzzy) || empty(untranslated) ? '' : '/'), untranslated)
- if strlen(b:airline_po_stats) < 10
- let b:airline_po_stats = messages. (!empty(b:airline_po_stats) && !empty(messages) ? '/':''). b:airline_po_stats
- endif
- endif
- let b:airline_po_stats = '['.b:airline_po_stats. '] '
- endfunction
- function! airline#extensions#po#on_winenter()
- if !exists('#airline')
- " airline disabled
- return
- endif
- " only reset cache, if the window size changed
- if get(b:, 'airline_winwidth', 0) != airline#util#winwidth()
- let b:airline_winwidth = airline#util#winwidth()
- " needs re-formatting
- unlet! b:airline_po_stats
- endif
- endfunction
- function! s:autocmd_handler()
- if exists('#airline')
- 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 * call s:autocmd_handler()
- 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
- " Write stdout to null because we only want to see warnings.
- if g:airline#init#is_windows
- let cmd = 'msgfmt --statistics -o /NUL '
- else
- let cmd = 'msgfmt --statistics -o /dev/null -- '
- endif
- 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
|