mirror of
https://github.com/gryf/.vim.git
synced 2025-12-17 11:30:29 +01:00
158 lines
4.3 KiB
VimL
158 lines
4.3 KiB
VimL
" loremipsum.vim
|
|
" @Author: Thomas Link (mailto:micathom AT gmail com?subject=[vim])
|
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
" @Created: 2008-07-10.
|
|
" @Last Change: 2008-07-11.
|
|
" @Revision: 0.0.138
|
|
|
|
if &cp || exists("loaded_loremipsum_autoload")
|
|
finish
|
|
endif
|
|
let loaded_loremipsum_autoload = 1
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
" http://www.lorem-ipsum-dolor-sit-amet.com/lorem-ipsum-dolor-sit-amet.html
|
|
let s:data = expand('<sfile>:p:h') .'/loremipsum.txt'
|
|
|
|
|
|
function! s:GetWords(nwords, splitrx, join) "{{{3
|
|
if exists('b:loremipsum_file')
|
|
let file = b:loremipsum_file
|
|
else
|
|
let file = get(g:loremipsum_files, &spelllang, s:data)
|
|
endif
|
|
let text = split(join(readfile(file), "\n"), a:splitrx)
|
|
let start = (localtime() * -23) % (len(text) - a:nwords)
|
|
let start = start < 0 ? -start : start
|
|
let out = join(text[start : start + a:nwords], a:join)
|
|
let out = substitute(out, '^\s*\zs\S', '\u&', '')
|
|
if out !~ '\.\s*$'
|
|
let out = substitute(out, '[[:punct:][:space:]]*$', '.', '')
|
|
endif
|
|
return out
|
|
endf
|
|
|
|
|
|
function! s:NoInline(flags) "{{{3
|
|
return get(a:flags, 0, 0)
|
|
endf
|
|
|
|
|
|
function! s:WrapMarker(marker, text) "{{{3
|
|
if len(a:marker) >= 2
|
|
let [pre, post; flags] = a:marker
|
|
if type(a:text) == 1
|
|
if s:NoInline(flags)
|
|
return a:text
|
|
else
|
|
return pre . a:text . post
|
|
endif
|
|
else
|
|
call insert(a:text, pre)
|
|
call add(a:text, post)
|
|
return a:text
|
|
endif
|
|
else
|
|
return a:text
|
|
endif
|
|
endf
|
|
|
|
|
|
function! loremipsum#Generate(nwords, template) "{{{3
|
|
let out = s:GetWords(a:nwords, '\s\+\zs', '')
|
|
let paras = split(out, '\n')
|
|
if empty(a:template) || a:template == '*'
|
|
let template = get(g:loremipsum_paragraph_template, &filetype, '')
|
|
elseif a:template == '_'
|
|
let template = ''
|
|
else
|
|
let template = a:template
|
|
endif
|
|
if !empty(template)
|
|
call map(paras, 'v:val =~ ''\S'' ? printf(template, v:val) : v:val')
|
|
end
|
|
return paras
|
|
endf
|
|
|
|
|
|
function! loremipsum#GenerateInline(nwords) "{{{3
|
|
let out = s:GetWords(a:nwords, '[[:space:]\n]\+', ' ')
|
|
" let out = substitute(out, '[[:punct:][:space:]]*$', '', '')
|
|
" let out = substitute(out, '[.?!]\(\s*.\)', ';\L\1', 'g')
|
|
return out
|
|
endf
|
|
|
|
|
|
" :display: loremipsum#Insert(?inline=0, ?nwords=100, " ?template='', ?pre='', ?post='')
|
|
function! loremipsum#Insert(...) "{{{3
|
|
let inline = a:0 >= 1 ? !empty(a:1) : 0
|
|
let nwords = a:0 >= 2 ? a:2 : g:loremipsum_words
|
|
let template = a:0 >= 3 ? a:3 : ''
|
|
if a:0 >= 5
|
|
let marker = [a:4, a:5]
|
|
elseif a:0 >= 4
|
|
if a:4 == '_'
|
|
let marker = []
|
|
else
|
|
echoerr 'Loremipsum: No postfix defined'
|
|
endif
|
|
else
|
|
let marker = get(g:loremipsum_marker, &filetype, [])
|
|
endif
|
|
" TLogVAR inline, nwords, template
|
|
if inline
|
|
let t = @t
|
|
try
|
|
let @t = s:WrapMarker(marker, loremipsum#GenerateInline(nwords))
|
|
norm! "tp
|
|
finally
|
|
let @t = t
|
|
endtry
|
|
else
|
|
let text = s:WrapMarker(marker, loremipsum#Generate(nwords, template))
|
|
let lno = line('.')
|
|
if getline(lno) !~ '\S'
|
|
let lno -= 1
|
|
endif
|
|
call append(lno, text)
|
|
exec 'norm! '. lno .'gggq'. len(text) ."j"
|
|
endif
|
|
endf
|
|
|
|
|
|
function! loremipsum#Replace(...) "{{{3
|
|
let replace = a:0 >= 1 ? a:1 : ''
|
|
if a:0 >= 3
|
|
let marker = [a:2, a:3]
|
|
else
|
|
let marker = get(g:loremipsum_marker, &filetype, [])
|
|
endif
|
|
if len(marker) >= 2
|
|
let [pre, post; flags] = marker
|
|
let pre = escape(pre, '\/')
|
|
let post = escape(post, '\/')
|
|
if s:NoInline(flags)
|
|
let pre = '\^\s\*'. pre .'\s\*\n'
|
|
let post = '\n\s\*'. post .'\s\*\n'
|
|
let replace .= "\<c-m>"
|
|
endif
|
|
let rx = '\V'. pre .'\_.\{-}'. post
|
|
let rpl = escape(replace, '\&~/')
|
|
let sr = @/
|
|
try
|
|
" TLogVAR rx, rpl
|
|
exec '%s/'. rx .'/'. rpl .'/ge'
|
|
finally
|
|
let @/ = sr
|
|
endtry
|
|
else
|
|
echoerr 'Loremipsum: No marker for '. &filetype
|
|
endif
|
|
endf
|
|
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|