105 lines
2.1 KiB
VimL
105 lines
2.1 KiB
VimL
XPTemplate priorit=like
|
|
|
|
let s:f = g:XPTfuncs()
|
|
|
|
XPTvar $TRUE 1
|
|
XPTvar $FALSE 0
|
|
XPTvar $NULL NULL
|
|
XPTvar $UNDEFINED NULL
|
|
|
|
" a ** = ** a ** + ** 1
|
|
" (a, ** b, ** )
|
|
XPTvar $SPop ' '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
" if () ** {
|
|
" else ** {
|
|
XPTvar $BRif ' '
|
|
|
|
" } ** else {
|
|
XPTvar $BRel \n
|
|
|
|
" for () ** {
|
|
" while () ** {
|
|
" do ** {
|
|
XPTvar $BRloop ' '
|
|
|
|
" struct name ** {
|
|
XPTvar $BRstc ' '
|
|
|
|
" int fun() ** {
|
|
" class name ** {
|
|
XPTvar $BRfun ' '
|
|
|
|
XPTinclude
|
|
\ _common/common
|
|
|
|
let s:printfElts = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
|
|
" %[flags][width][.precision][length]specifier
|
|
let s:printfItemPattern = '\V\C' . '%' . '\[+\- 0#]\*' . '\%(*\|\d\+\)\?' . '\(.*\|.\d\+\)\?' . '\[hlL]\?' . '\(\[cdieEfgGosuxXpn]\)'
|
|
|
|
let s:printfSpecifierMap = {
|
|
\'c' : 'char',
|
|
\'d' : 'int',
|
|
\'i' : 'int',
|
|
\'e' : 'scientific',
|
|
\'E' : 'scientific',
|
|
\'f' : 'float',
|
|
\'g' : 'float',
|
|
\'G' : 'float',
|
|
\'o' : 'octal',
|
|
\'s' : 'str',
|
|
\'u' : 'unsigned',
|
|
\'x' : 'decimal',
|
|
\'X' : 'Decimal',
|
|
\'p' : 'pointer',
|
|
\'n' : 'numWritten',
|
|
\}
|
|
|
|
fun! s:f.c_printf_elts( v, sep )
|
|
|
|
" remove '%%' representing a single '%'
|
|
|
|
let v = substitute( a:v, '\V%%', '', 'g' )
|
|
|
|
let [ ml, mr ] = XPTmark()
|
|
|
|
if v =~ '\V%'
|
|
|
|
let start = 0
|
|
let post = ''
|
|
let i = -1
|
|
while 1
|
|
let i += 1
|
|
|
|
let start = match( v, s:printfItemPattern, start )
|
|
if start < 0
|
|
break
|
|
endif
|
|
|
|
let eltList = matchlist( v, s:printfItemPattern, start )
|
|
|
|
if eltList[1] == '.*'
|
|
" need to specifying string length before string pointer
|
|
let post .= a:sep . self.GetVar( '$SPop' ) . ml . s:printfElts[ i ] . '_len' . mr
|
|
endif
|
|
|
|
let post .= a:sep . self.GetVar( '$SPop' ) . ml . s:printfElts[ i ] . '_' . s:printfSpecifierMap[ eltList[2] ] . mr
|
|
|
|
let start += len( eltList[0] )
|
|
|
|
endwhile
|
|
return post
|
|
|
|
else
|
|
return self.Next( '' )
|
|
|
|
endif
|
|
endfunction
|
|
|
|
|