From 86721731c740d0ea07e6b90e601a80770c3d9f36 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Tue, 5 Mar 2019 09:34:59 +0100 Subject: Add lilypond support, closes #278 --- indent/lilypond.vim | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 indent/lilypond.vim (limited to 'indent/lilypond.vim') diff --git a/indent/lilypond.vim b/indent/lilypond.vim new file mode 100644 index 00000000..169a6758 --- /dev/null +++ b/indent/lilypond.vim @@ -0,0 +1,64 @@ +if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'lilypond') != -1 + finish +endif + +" LilyPond indent file +" Language: LilyPond +" Maintainer: Heikki Junes +" Last Change: 2010 Jul 26 +" +" Installed As: vim/indent/lilypond.vim +" +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetLilyPondIndent() +setlocal indentkeys=o,O,},>>,!^F + +" Only define the function once. +if exists("*GetLilyPondIndent") + finish +endif + +function GetLilyPondIndent() + if v:lnum == 1 + return 0 + endif + + "Find a non-blank line above the current line. + let lnum = prevnonblank(v:lnum - 1) + "Check if a block was started: '{' or '<<' is the last non-blank character of the previous line. + if getline(lnum) =~ '^.*\({\|<<\)\s*$' + let ind = indent(lnum) + &sw + else + let ind = indent(lnum) + endif + + "Check if a block was ended: '}' or '>>' is the first non-blank character of the current line. + if getline(v:lnum) =~ '^\s*\(}\|>>\)' + let ind = ind - &sw + endif + + " Check if the first character from the previous line is within + " a `lilyScheme' region, and if so, use lisp-style indentation + " for the current line. + " + " TODO: + " - Only works in version 7.1.215 or later, though it should + " silently fail in older versions. + " - We should support `lilyScheme' regions that begin in the + " middle of the line, too. + for id in synstack(lnum, 1) + if synIDattr(id, "name") == "lilyScheme" + let ind = lispindent(v:lnum) + endif + endfor + + return ind +endfunction +" +" +" -- cgit v1.2.3