Vim::Snippet::Converter - A Template Converter for Slippery Snippet Vim Plugin


Vim-Snippet-Converter documentation Contained in the Vim-Snippet-Converter distribution.

Index


Code Index:

NAME

Top

Vim::Snippet::Converter - A Template Converter for Slippery Snippet Vim Plugin

VERSION

Top

Version 0.082

SYNOPSIS

Top

    #!perl
    use Vim::Snippet::Converter;

    my $vsc = Vim::Snippet::Converter->new();
    open my $in , "<" , "perl.snt";
    open my $out , ">" , "perl_snippets.vim";
    $vsc->convert( $in , $out );
    close ($in , $out);

DESCRIPTION

Top

This module provides template conversion for Vim SnippetEmu Plugin ( http://www.vim.org/scripts/script.php?script_id=1318 )

You can write your template simply. see "TEMPLATE FORMAT"

SCRIPT

Top

convert template file (*.snt)

    $ scc -s [filename]  [-i {path}] [-c {path}]

for example:

    # generate snippet vim script to stdout
    $ scc -s perl.snt

    $ scc -s filename.snt > perl_snippets.vim




    # to replace the previous install automatically.
    $ scc -s filename.snt -i ~/.vim/syntax/perl.vim

    -s, --src  [filename]
        specify source file path

    -i, --install-to [filename]
        specify vim script path, e.g.  ~/.vim/syntax/perl.vim

    -c, --create-completion [filepath]
        create snippet keyword completion file for vim

to save triggers into vim completion file:

    $ scc -s perl.snt -c vim_completion

VIM COMPLETION DICTIONARY

Top

save triggers into vim completion file:

    $ scc -s perl.snt -c vim_completion

append the below setting to your .vimrc , it is located in your home directory.

    set dictionary+=/path/to/vim_completion

when you want to call the keyword completion , just press Ctrl-X Ctrl-K in Insert-Mode.

TEMPLATE FORMAT

Top

    # comments
    ;sub
    sub <<function>> ( <<prototype>> ) {
        my <<>> = <<>>;
        return <<returnValue>>;
    }
    ;end

sub is a trigger name , when you press <Tab> , the trigger will be replaced with the template.

<<function>> is called Place Holder , when you press <Tab> again , curosr will jump to the next position to let you enter some text.

FUNCTIONS

Top

new

convert

_gen_trigger

_gen_snippet

parse

gen_header

AUTHOR

Top

Cornelius, <cornelius.howl+cpan at gmail.com>

BUGS

Top

Please report any bugs or feature requests to bug-vim-snippet-compiler at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Vim-Snippet-Converter. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Vim::Snippet::Converter

You can also look for information at:

* Vim

http://www.vim.org/

* Slippery Snippets Vim Plugin

http://slipperysnippets.blogspot.com/2006/12/howto-try-out-latest-version-of.html

http://c9s.blogspot.com/2007/06/vim-snippet.html

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Vim-Snippet-Converter

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Vim-Snippet-Converter

* CPAN Ratings

http://cpanratings.perl.org/d/Vim-Snippet-Converter

* Search CPAN

http://search.cpan.org/dist/Vim-Snippet-Converter

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Vim-Snippet-Converter documentation Contained in the Vim-Snippet-Converter distribution.
package Vim::Snippet::Converter;
use warnings;
use strict;
use File::Path qw(mkpath rmtree);
use File::Copy 'copy';

our $VERSION = '0.082';

sub new {
    my $class = shift;
    return bless {} , $class;
}

sub convert {
    my ( $self , $in , $out ) = @_;
    $self->parse( $in , $out );
}

sub _gen_trigger {
    my $self = shift;
    my $trigger_name = shift;
    my $snippet_code = shift;

    my $output = "exec \"Snippet $trigger_name ";
    $output .= $snippet_code . "\"\n";
    return $output;
}

sub _gen_snippet {
    my $self = shift;
    my $buf  = shift;

    # strip comment
    return $buf if( $buf =~ s/^#/"/ );

    # place holder
    my $space = ' ' x 4;
    $buf =~ s{"}{\\"}g;
    $buf =~ s{<<>>}{".st.et."}g;
    $buf =~ s{<<(.+?)>>}{".st."$1".et."}g;
    $buf =~ s{\n}{<CR>}g;
    $buf =~ s{\t}{<Tab>}g;
    $buf =~ s{$space}{<Tab>}g;
    return $buf;
}

sub parse {
    my ( $self , $in , $out ) = @_;

    my @trigger_names = ( );
    $self->{triggers} = \@trigger_names;

	print $out $self->gen_header();
    while (<$in>) { 
        # print $out snippet_gen( $1) 
        if ( my ( $snippet_name ) = ( $_ =~ m/^;(\w+?)$/ ) ) {
            # read snippet template
            
            # print STDERR "Add trigger: $snippet_name\n";
            push @{ $self->{triggers} } , $snippet_name;
            my $code_buffer = '';

            R_SNIPPET:
            while( my $tpl_line = <$in> ) {
                if( $tpl_line =~ m/^;end$/ ) {
                    # write template
                    my $snippet_o = $self->_gen_snippet( $code_buffer );
                    print $out $self->_gen_trigger( $snippet_name , $snippet_o );
                    last R_SNIPPET;
                }
                $code_buffer .= $tpl_line;
            }
        }
    }
}

sub gen_header {
	return <<EOF;
if !exists('loaded_snippet') || &cp
    finish
endif

let st = g:snip_start_tag
let et = g:snip_end_tag
let cd = g:snip_elem_delim

EOF

}


1; # End of Vim::Snippet::Converter