"============================================================================= " File : autoload/unite/sources/outline/defaults/perl.vim " Author : h1mesuke " Updated : 2012-01-11 " " Licensed under the MIT license: " http://www.opensource.org/licenses/mit-license.php " "============================================================================= " Default outline info for Perl " Version: 0.1.0 function! unite#sources#outline#defaults#perl#outline_info() abort return s:outline_info endfunction let s:Util = unite#sources#outline#import('Util') "----------------------------------------------------------------------------- " Outline Info let s:outline_info = { \ 'heading-1': s:Util.shared_pattern('sh', 'heading-1'), \ 'heading' : '^\%(\s*\%(sub\s\+\h\|subtest\s\+["'']\?\h\|\%(package\|BEGIN\|CHECK\|INIT\|END\)\>\)\|__\%(DATA\|END\)__$\)', \ \ 'skip': { \ 'header': s:Util.shared_pattern('sh', 'header'), \ 'block' : ['^=\%(cut\)\@!\w\+', '^=cut'], \ }, \ \ 'highlight_rules': [ \ { 'name' : 'comment', \ 'pattern' : '/#.*/' }, \ { 'name' : 'sub', \ 'pattern' : '/\h\w*/', \ 'highlight': unite#sources#outline#get_highlight('function') }, \ { 'name' : 'subtest', \ 'pattern' : '/\h\w*/', \ 'highlight': unite#sources#outline#get_highlight('normal') }, \ { 'name' : 'block', \ 'pattern' : '/\<\%(BEGIN\|CHECK\|INIT\|END\|__\%(DATA\|END\)__\)\>/', \ 'highlight': unite#sources#outline#get_highlight('special') }, \ { 'name' : 'package', \ 'pattern' : '/\S\+\ze : package/', \ 'highlight': unite#sources#outline#get_highlight('type') }, \ { 'name' : '_after_colon', \ 'pattern' : '/ : \h\w*/', \ 'highlight': unite#sources#outline#get_highlight('normal') }, \ ], \} function! s:outline_info.create_heading(which, heading_line, matched_line, context) abort let h_lnum = a:context.heading_lnum " Level 1 to 3 are reserved for comment headings. let level = s:Util.get_indent_level(a:context, h_lnum) + 3 let heading = { \ 'word' : a:heading_line, \ 'level': level, \ 'type' : 'generic', \ } if a:which == 'heading-1' && a:heading_line =~ '^\s*#' let m_lnum = a:context.matched_lnum let heading.type = 'comment' let heading.level = s:Util.get_comment_heading_level(a:context, m_lnum) elseif a:which == 'heading' if a:heading_line =~ '^\s*package\>' let heading.word = substitute(heading.word, ';\s*$', '', '') let heading.word = substitute(heading.word, '^\s*\zspackage\s\+', '', '') . ' : package' else let heading.word = substitute(heading.word, '\\s*q\?[''"]\(.*\)[''"]\s.*$', '\1 : subtest', '') let heading.word = substitute(heading.word, '\', '', '') let heading.word = substitute(heading.word, '\s*{.*$', '', '') let heading.level += 1 endif endif return heading endfunction