821 lines
15 KiB
VimL
821 lines
15 KiB
VimL
XPTemplate priority=lang keyword=:%#
|
|
|
|
" containers
|
|
let s:f = g:XPTfuncs()
|
|
|
|
" inclusion
|
|
XPTinclude
|
|
\ _common/common
|
|
|
|
" ========================= Function and Variables =============================
|
|
|
|
fun! s:f.RubyCamelCase(...) "{{{
|
|
let str = a:0 == 0 ? self.V() : a:1
|
|
let r = substitute(substitute(str, "[\/ _]", ' ', 'g'), '\<.', '\u&', 'g')
|
|
return substitute(r, " ", '', 'g')
|
|
endfunction "}}}
|
|
|
|
fun! s:f.RubySnakeCase(...) "{{{
|
|
let str = a:0 == 0 ? self.V() : a:1
|
|
return substitute(str," ",'_','g')
|
|
endfunction "}}}
|
|
|
|
" Multiple each snippet {{{
|
|
"{{{ s:each_list
|
|
let s:each_list = [ 'byte', 'char', 'cons', 'index', 'key',
|
|
\'line', 'pair', 'slice', 'value' ]
|
|
"}}}
|
|
|
|
fun! s:f.RubyEachPopup() "{{{
|
|
let l = []
|
|
for i in s:each_list
|
|
let l += [{'word': i, 'menu': 'each_' . i . '{ |..| ... }'}]
|
|
endfor
|
|
return l
|
|
endfunction "}}}
|
|
|
|
fun! s:f.RubyEachBrace() "{{{
|
|
let v = self.SV('^_','','')
|
|
if v == ''
|
|
return ''
|
|
elseif v =~# 'slice\|cons'
|
|
return '_' . v.'(`val^3^)'
|
|
else
|
|
return '_' . v
|
|
endif
|
|
endfunction "}}}
|
|
|
|
fun! s:f.RubyEachPair() "{{{
|
|
let v = self.R('what')
|
|
if v =~# 'pair'
|
|
return '`el1^, `el2^'
|
|
elseif v == ''
|
|
return '`el^'
|
|
else
|
|
if v =~ 'slice\|cons'
|
|
let v = substitute(v,'val','','')
|
|
endif
|
|
return '`' . substitute(v,'[^a-z]','','g') . '^'
|
|
endif
|
|
endfunction "}}}
|
|
" End multiple each snippet }}}
|
|
|
|
" Multiple assert snippet {{{
|
|
"{{{ s:assert_map
|
|
let s:assert_map = {
|
|
\'block' : '' . ' { `cursor^ }',
|
|
\'equals' : '(`expected^, `actual^`, `message^)' . '',
|
|
\'in_delta' : '(`expected float^, `actual float^, `delta^`, `message^)' . '',
|
|
\'instance_of' : '(`klass^, `object to compare^`, `message^)' . '',
|
|
\'kind_of' : '(`klass^, `object to compare^`, `message^)' . '',
|
|
\'match' : '(/`regexp^/`^, `string^`, `message^)' . '',
|
|
\'not_equal' : '(`expected^, `actual^`, `message^)' . '',
|
|
\'nil' : '(`object^`, `message^)' . '',
|
|
\'no_match' : '(/`regexp^/`^, `string^`, `message^)' . '',
|
|
\'not_nil' : '(`object^`, `message^)' . '',
|
|
\'nothing_raised' : '(`exception^)' . ' { `cursor^ }',
|
|
\'not_same' : '(`expected^, `actual^`, `message^)' . '',
|
|
\'nothing_thrown' : '`(`message`)^' . ' { `cursor^ }',
|
|
\'operator' : '(`obj1^, `operator^, `obj2^`, `message^)' . '',
|
|
\'raise' : '(`exception^)' . ' { `cursor^ }',
|
|
\'respond_to' : '(`object^, `respond to this message^`, `message^)' . '',
|
|
\'same' : '(`expected^, `actual^`, `message^)' . '',
|
|
\'send' : '([`receiver^, `method^, `args^]`, `message^)' . '',
|
|
\'throws' : '(`expected symbol^`, `message^)' . ' { `cursor^ }',
|
|
\}
|
|
"}}}
|
|
|
|
fun! s:RubyAssertPopupSort(a, b) "{{{
|
|
return a:a.word == a:b.word ? 0 : a:a.word > a:b.word ? 1 : -1
|
|
endfunction "}}}
|
|
|
|
fun! s:f.RubyAssertPopup() "{{{
|
|
let list = []
|
|
for [k, v] in items(s:assert_map)
|
|
let list += [{ 'word' : k, 'menu' : 'assert_' . k . substitute(v, '`.\{-}^', '..', 'g') }]
|
|
endfor
|
|
return sort(list, 's:RubyAssertPopupSort')
|
|
endfunction "}}}
|
|
|
|
fun! s:f.RubyAssertMethod() "{{{
|
|
let v = self.SV('^_', '', '')
|
|
if v == ''
|
|
return v . '(`^`, `message^)'
|
|
endif
|
|
if has_key(s:assert_map, v)
|
|
return '_' . v . s:assert_map[v]
|
|
else
|
|
return ''
|
|
endif
|
|
endfunction "}}}
|
|
" End multiple assert snippet }}}
|
|
|
|
" Repeat an item inside its edges.
|
|
" Behave like ExpandIfNotEmpty() but within edges
|
|
fun! s:f.RepeatInsideEdges(sep) "{{{
|
|
let [edgeLeft, edgeRight] = self.ItemEdges()
|
|
let v = self.V()
|
|
let n = self.N()
|
|
if v == '' || v == self.ItemFullname()
|
|
return ''
|
|
endif
|
|
|
|
|
|
let v = self.ItemStrippedValue()
|
|
let [ markLeft, markRight ] = XPTmark()
|
|
|
|
let newName = 'n' . n
|
|
let res = edgeLeft . v
|
|
let res .= markLeft . a:sep . markLeft . newName . markRight
|
|
let res .= 'ExpandIfNotEmpty("' . a:sep . '", "' . newName . '")' . markRight . markRight
|
|
let res .= edgeRight
|
|
|
|
|
|
return res
|
|
endfunction "}}}
|
|
|
|
" Remove an item if its value hasn't change
|
|
fun! s:f.RemoveIfUnchanged() "{{{
|
|
let v = self.V()
|
|
let [lft, rt] = self.ItemEdges()
|
|
if v == lft . self.N() . rt
|
|
return ''
|
|
else
|
|
return v
|
|
end
|
|
endfunction "}}}
|
|
|
|
|
|
|
|
" ================================= Snippets ===================================
|
|
|
|
XPT # syn=string " #{..}
|
|
#{`^}
|
|
|
|
|
|
XPT : " :... => ...
|
|
:`key^ => `value^
|
|
|
|
|
|
XPT % " %**[..]
|
|
XSET _=Choose(['w', 'W', 'q', 'Q'])
|
|
%`_^[`^]
|
|
|
|
|
|
XPT BEG " BEGIN { .. }
|
|
BEGIN {
|
|
`cursor^
|
|
}
|
|
|
|
|
|
XPT Comp " include Comparable def <=> ...
|
|
include Comparable
|
|
|
|
def <=>(other)
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT END " END { .. }
|
|
END {
|
|
`cursor^
|
|
}
|
|
|
|
|
|
XPT Enum " include Enumerable def each ...
|
|
include Enumerable
|
|
|
|
def each(&block)
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT Forw " extend Forwardable
|
|
extend Forwardable
|
|
|
|
|
|
XPT Md " Marshall Dump
|
|
File.open(`filename^, "wb") { |`file^| Marshal.dump(`obj^, `file^) }
|
|
|
|
|
|
XPT Ml " Marshall Load
|
|
File.open(`filename^, "rb") { |`file^| Marshal.load(`file^) }
|
|
|
|
|
|
XPT Pn " PStore.new\(..)
|
|
PStore.new(`filename^)
|
|
|
|
|
|
XPT Yd " YAML dump
|
|
File.open("`filename^.yaml", "wb") { |`file^| YAML.dump(`obj^,`file^) }
|
|
|
|
|
|
XPT Yl " YAML load
|
|
File.open("`filename^.yaml") { |`file^| YAML.load(`file^) }
|
|
|
|
|
|
XPT _d " __DATA__
|
|
__DATA__
|
|
|
|
|
|
XPT _e " __END__
|
|
__END__
|
|
|
|
|
|
XPT _f " __FILE__
|
|
__FILE__
|
|
|
|
|
|
XPT ali " alias : .. : ..
|
|
XSET new.post=RubySnakeCase()
|
|
XSET old=old_{R("new")}
|
|
XSET old.post=RubySnakeCase()
|
|
alias :`new^ :`old^
|
|
|
|
|
|
XPT all " all? { .. }
|
|
all? { |`element^| `cursor^ }
|
|
|
|
|
|
XPT amm " alias_method : .. : ..
|
|
XSET new.post=RubySnakeCase()
|
|
XSET old=old_{R("new")}
|
|
XSET old.post=RubySnakeCase()
|
|
alias_method :`new^, :`old^
|
|
|
|
|
|
XPT any " any? { |..| .. }
|
|
any? { |`element^| `cursor^ }
|
|
|
|
|
|
XPT app " if __FILE__ == $PROGRAM_NAME ...
|
|
if __FILE__ == $PROGRAM_NAME
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT array " Array.new\(..) { ... }
|
|
Array.new(`size^) { |`i^| `cursor^ }
|
|
|
|
XPT ass " assert**\(..) ...
|
|
XSET what=RubyAssertPopup()
|
|
XSET what|post=RubyAssertMethod()
|
|
XSET message|post=RemoveIfUnchanged()
|
|
assert`_`what^
|
|
|
|
|
|
XPT attr " attr_** :...
|
|
XSET what=Choose(["accessor", "reader", "writer"])
|
|
XSET what|post=SV("^_$",'','')
|
|
XSET attr*|post=ExpandIfNotEmpty(', :', 'attr*')
|
|
attr`_`what^ :`attr*^
|
|
|
|
XPT begin " begin .. rescue .. else .. end
|
|
XSET block=# block
|
|
XSET Exception|post=RubyCamelCase()
|
|
begin
|
|
`expr^
|
|
``rescue...`
|
|
{{^rescue `Exception^` => `e^
|
|
`block^
|
|
``rescue...`
|
|
^`}}^``else...`
|
|
{{^else
|
|
`block^
|
|
`}}^``ensure...`
|
|
{{^ensure
|
|
`cursor^
|
|
`}}^end
|
|
|
|
XPT bm " Benchmark.bmbm do ... end
|
|
XSET times=10_000
|
|
TESTS = `times^
|
|
|
|
Benchmark.bmbm do |result|
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT case " case .. when .. end
|
|
XSET block=# block
|
|
case `target^`
|
|
when `comparison^
|
|
`block^
|
|
``when...`
|
|
{{^when `comparison^
|
|
`block^
|
|
``when...`
|
|
^`}}^``else...`
|
|
{{^else
|
|
`cursor^
|
|
`}}^end
|
|
|
|
|
|
XPT cfy " classify { |..| .. }
|
|
classify { |`element^| `cursor^ }
|
|
|
|
|
|
XPT cl " class .. end
|
|
XSET ClassName.post=RubyCamelCase()
|
|
class `ClassName^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT cld " class .. < DelegateClass .. end
|
|
XSET ClassName.post=RubyCamelCase()
|
|
XSET ParentClass.post=RubyCamelCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
class `ClassName^ < DelegateClass(`ParentClass^)
|
|
def initialize`(`arg*`)^
|
|
super(`delegate object^)
|
|
|
|
`cursor^
|
|
end
|
|
end
|
|
|
|
|
|
XPT cli " class .. def initialize\(..) ...
|
|
XSET ClassName|post=RubyCamelCase()
|
|
XSET name|post=RubySnakeCase()
|
|
XSET init=Trigger('defi')
|
|
XSET def=Trigger('def')
|
|
class `ClassName^
|
|
`init^`
|
|
`def...^
|
|
|
|
`def^`
|
|
`def...^
|
|
end
|
|
|
|
|
|
XPT cls " class << .. end
|
|
XSET self=self
|
|
class << `self^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT clstr " .. = Struct.new ...
|
|
XSETm do...|post
|
|
do
|
|
`cursor^
|
|
end
|
|
XSETm END
|
|
XSET ClassName|post=RubyCamelCase()
|
|
XSET attr*|post=RepeatInsideEdges(', :')
|
|
`ClassName^ = Struct.new`(:`attr*`)^` `do...^
|
|
|
|
|
|
XPT col " collect { .. }
|
|
collect { |`obj^| `cursor^ }
|
|
|
|
|
|
XPT deec " Deep copy
|
|
Marshal.load(Marshal.dump(`obj^))
|
|
|
|
|
|
XPT def " def .. end
|
|
XSET method|post=RubySnakeCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
def `method^`(`arg*`)^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT defd " def_delegator : ...
|
|
def_delegator :`del obj^, :`del meth^, :`new name^
|
|
|
|
|
|
XPT defds " def_delegators : ...
|
|
def_delegators :`del obj^, :`del methods^
|
|
|
|
|
|
XPT defi " def initialize .. end
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
def initialize`(`arg*`)^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT defmm " def method_missing\(..) .. end
|
|
def method_missing(meth, *args, &block)
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT defs " def self... end
|
|
XSET method.post=RubySnakeCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
def self.`method^`(`arg*`)^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT deft " def test_.. .. end
|
|
XSET name|post=RubySnakeCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
def test_`name^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT deli " delete_if { |..| .. }
|
|
delete_if { |`arg^| `cursor^ }
|
|
|
|
|
|
XPT det " detect { .. }
|
|
detect { |`obj^| `cursor^ }
|
|
|
|
|
|
XPT dir " Dir[..]
|
|
XSET _='/**/*'
|
|
Dir[`_^]
|
|
|
|
|
|
XPT dirg " Dir.glob\(..) { |..| .. }
|
|
Dir.glob(`dir^) { |`file^| `cursor^ }
|
|
|
|
|
|
XPT do " do |..| .. end
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
do` |`arg*`|^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT dow " downto\(..) { .. }
|
|
XSET arg=i
|
|
XSET lbound=0
|
|
downto(`lbound^) { |`arg^| `cursor^ }
|
|
|
|
|
|
XPT each " each_** { .. }
|
|
XSET what=RubyEachPopup()
|
|
XSET what|post=RubyEachBrace()
|
|
XSET vars=RubyEachPair()
|
|
each`_`what^ { |`vars^| `cursor^ }
|
|
|
|
|
|
XPT fdir " File.dirname\(..)
|
|
File.dirname(`^)
|
|
|
|
|
|
XPT fet " fetch\(..) { |..| .. }
|
|
fetch(`name^) { |`key^| `cursor^ }
|
|
|
|
|
|
XPT file " File.foreach\(..) ...
|
|
File.foreach('`filename^') { |`line^| `cursor^ }
|
|
|
|
|
|
XPT fin " find { |..| .. }
|
|
find { |`element^| `cursor^ }
|
|
|
|
|
|
XPT fina " find_all { |..| .. }
|
|
find_all { |`element^| `cursor^ }
|
|
|
|
|
|
XPT fjoin " File.join\(..)
|
|
File.join(`dir^, `path^)
|
|
|
|
|
|
XPT fla " flatten_once
|
|
inject(Array.new) { |`arr^, `a^| `arr^.push(*`a^) }
|
|
|
|
|
|
XPT fread " File.read\(..)
|
|
File.read(`filename^)
|
|
|
|
|
|
XPT grep " grep\(..) { |..| .. }
|
|
grep(/`pattern^/) { |`match^| `cursor^ }
|
|
|
|
|
|
XPT gsub " gsub\(..) { |..| .. }
|
|
gsub(/`pattern^/) { |`match^| `cursor^ }
|
|
|
|
|
|
XPT hash " Hash.new { ... }
|
|
Hash.new { |`hash^,`key^| `hash^[`key^] = `cursor^ }
|
|
|
|
XPT if " if .. end
|
|
if `boolean exp^
|
|
`cursor^
|
|
end
|
|
|
|
XPT ife " if .. else .. end
|
|
XSET block=# block
|
|
if `boolean exp^
|
|
`block^
|
|
else
|
|
`cursor^
|
|
end
|
|
|
|
XPT ifei " if .. elsif .. else .. end
|
|
XSET block=# block
|
|
if `boolean exp^`
|
|
`block^
|
|
``elsif...`
|
|
{{^elsif `comparison^
|
|
`block^
|
|
``elsif...`
|
|
^`}}^``else...`
|
|
{{^else
|
|
`cursor^
|
|
`}}^end
|
|
|
|
|
|
XPT inj " inject\(..) { |..| .. }
|
|
inject`(`arg`)^ { |`accumulator^, `element^| `cursor^ }
|
|
|
|
|
|
XPT lam " lambda { .. }
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
lambda {` |`arg*`|^ `cursor^ }
|
|
|
|
|
|
XPT loop " loop do ... end
|
|
loop do
|
|
`cursor^
|
|
end
|
|
|
|
XPT map " map { |..| .. }
|
|
map { |`arg^| `cursor^ }
|
|
|
|
|
|
XPT max " max { |..| .. }
|
|
max { |`element1^, `element2^| `cursor^ }
|
|
|
|
|
|
XPT min " min { |..| .. }
|
|
min { |`element1^, `element2^| `cursor^ }
|
|
|
|
|
|
XPT mod " module .. .. end
|
|
XSET module name|post=RubyCamelCase()
|
|
module `module name^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT modf " module .. module_function .. end
|
|
XSET module name|post=RubyCamelCase()
|
|
module `module name^
|
|
module_function
|
|
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT nam " Rake Namespace
|
|
XSET ns=fileRoot()
|
|
namespace :`ns^ do
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT new " Instanciate new object
|
|
XSET Object|post=RubyCamelCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
`var^ = `Object^.new`(`arg*`)^
|
|
|
|
|
|
XPT open " open\(..) { |..| .. }
|
|
XSET mode...|post=, '`wb^'
|
|
open(`filename^`, `mode...^) { |`io^| `cursor^ }
|
|
|
|
|
|
XPT par " partition { |..| .. }
|
|
partition { |`element^| `cursor^ }
|
|
|
|
|
|
XPT pathf " Path from here
|
|
XSET path=../lib
|
|
File.join(File.dirname(__FILE__), "`path^")
|
|
|
|
|
|
XPT rdoc syn=comment " RDoc description
|
|
=begin rdoc
|
|
# `cursor^
|
|
#=end
|
|
|
|
|
|
XPT rej " reject { |..| .. }
|
|
reject { |`element^| `cursor^ }
|
|
|
|
|
|
XPT rep " Benchmark report
|
|
result.report("`name^: ") { TESTS.times { `cursor^ } }
|
|
|
|
|
|
XPT req " require ..
|
|
require '`lib^'
|
|
|
|
|
|
XPT reqs " %w[..].map { |lib| require lib }
|
|
XSET lib*|post=ExpandIfNotEmpty(' ', 'lib*')
|
|
%w[`lib*^].map { |lib| require lib }
|
|
|
|
..XPT
|
|
|
|
|
|
XPT reve " reverse_each { .. }
|
|
reverse_each { |`element^| `cursor^ }
|
|
|
|
|
|
XPT ruby " #!/usr/bin/env ruby
|
|
XSET enc=Echo(&fenc ? &fenc : &enc)
|
|
#!/usr/bin/env ruby
|
|
# -*- encoding: `enc^ -*-
|
|
|
|
XPT shebang alias=ruby
|
|
|
|
XPT sb alias=ruby
|
|
|
|
|
|
|
|
XPT scan " scan\(..) { |..| .. }
|
|
scan(/`pattern^/) { |`match^| `cursor^ }
|
|
|
|
|
|
XPT sel " select { |..| .. }
|
|
select { |`element^| `cursor^ }
|
|
|
|
|
|
XPT sinc " class << self; self; end
|
|
class << self; self; end
|
|
|
|
|
|
XPT sor " sort { |..| .. }
|
|
sort { |`element1^, `element2^| `element1^ <=> `element2^ }
|
|
|
|
|
|
XPT sorb " sort_by { |..| .. }
|
|
sort_by {` |`arg`|^ `cursor^ }
|
|
|
|
|
|
XPT ste " step\(..) { .. }
|
|
step(`count^`, `step^) { |`i^| `cursor^ }
|
|
|
|
|
|
XPT sub " sub\(..) { |..| .. }
|
|
sub(/`pattern^/) { |`match^| `cursor^ }
|
|
|
|
|
|
XPT subcl " class .. < .. end
|
|
XSET ClassName.post=RubyCamelCase()
|
|
XSET Parent.post=RubyCamelCase()
|
|
class `ClassName^ < `Parent^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT tas " Rake Task
|
|
XSET task name|post=RubySnakeCase()
|
|
XSET dep*|post=RepeatInsideEdges(', :')
|
|
desc "`task description^"
|
|
task :`task name^` => [:`dep*`]^ do
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT tc " require 'test/unit' ... class Test.. < Test::Unit:TestCase ...
|
|
XSET ClassName=RubyCamelCase(R("module"))
|
|
XSET ClassName.post=RubyCamelCase()
|
|
XSET deft=Trigger('deft')
|
|
require "test/unit"
|
|
require "`module^"
|
|
|
|
class Test`ClassName^ < Test::Unit::TestCase
|
|
`deft^`
|
|
|
|
`deft...`{{^
|
|
|
|
`deft^`
|
|
|
|
`deft...`^`}}^
|
|
end
|
|
|
|
|
|
XPT tif " .. ? .. : ..
|
|
(`boolean exp^) ? `exp if true^ : `exp if false^
|
|
|
|
|
|
XPT tim " times { .. }
|
|
times {` |`i`|^ `cursor^ }
|
|
|
|
|
|
XPT tra " transaction\(..) { ... }
|
|
transaction(`true^) { `cursor^ }
|
|
|
|
|
|
XPT unif " Unix Filter
|
|
ARGF.each_line do |`line^|
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT unless " unless .. end
|
|
unless `boolean cond^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT until " until .. end
|
|
until `boolean cond^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT upt " upto\(..) { .. }
|
|
upto(`ubound^) { |`i^| `cursor^ }
|
|
|
|
|
|
XPT usai " if ARGV.. abort\("Usage...
|
|
XSET args=[options]
|
|
if ARGV`^
|
|
abort "Usage: #{$PROGRAM_NAME} `args^"
|
|
end
|
|
|
|
|
|
XPT usau " unless ARGV.. abort\("Usage...
|
|
XSET args=[options]
|
|
unless ARGV`^
|
|
abort "Usage: #{$PROGRAM_NAME} `args^"
|
|
end
|
|
|
|
|
|
XPT while " while .. end
|
|
while `boolean cond^
|
|
`cursor^
|
|
end
|
|
|
|
|
|
XPT wid " with_index { .. }
|
|
with_index { |`element^, `index^| `cursor^ }
|
|
|
|
|
|
XPT xml " REXML::Document.new\(..)
|
|
REXML::Document.new(File.read(`filename^))
|
|
|
|
|
|
XPT y syn=comment " :yields:
|
|
:yields:
|
|
|
|
|
|
XPT zip " zip\(..) { |..| .. }
|
|
zip(`enum^) { |`row^| `cursor^ }
|
|
|
|
|
|
|
|
|
|
" ================================= Wrapper ===================================
|
|
|
|
|
|
|
|
XPT invoke_ wraponly=wrapped " ..(SEL)
|
|
XSET name|post=RubySnakeCase()
|
|
`name^(`wrapped^)
|
|
|
|
|
|
XPT def_ wraponly=wrapped " def ..() SEL end
|
|
XSET method_name|post=RubySnakeCase()
|
|
XSET arg*|post=RepeatInsideEdges(', ')
|
|
def `method_name^`(`arg*`)^
|
|
`wrapped^
|
|
end
|
|
|
|
|
|
XPT class_ wraponly=wrapped " class .. SEL end
|
|
XSET _|post=RubyCamelCase()
|
|
class `_^
|
|
`wrapped^
|
|
end
|
|
|
|
|
|
XPT module_ wraponly=wrapped " module .. SEL end
|
|
XSET _|post=RubyCamelCase()
|
|
module `_^
|
|
`wrapped^
|
|
end
|
|
|
|
|
|
XPT begin_ wraponly=wrapped " begin SEL rescue .. else .. end
|
|
XSET Exception|post=RubyCamelCase()
|
|
XSET block=# block
|
|
begin
|
|
`wrapped^
|
|
``rescue...`
|
|
{{^rescue `Exception^` => `e^
|
|
`block^
|
|
``rescue...`
|
|
^`}}^``else...`
|
|
{{^else
|
|
`block^
|
|
`}}^``ensure...`
|
|
{{^ensure
|
|
`cursor^
|
|
`}}^end
|
|
|