2013-12-09 14:49:58 +00:00
|
|
|
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
|
|
|
|
<xsl:output indent="no" method="text" omit-xml-declaration="yes" version="2.0"/>
|
|
|
|
|
<xsl:template match="/">
|
|
|
|
|
" Vim syntax file
|
2013-12-13 14:45:50 +00:00
|
|
|
" Language: CP2K input files
|
2013-12-09 14:49:58 +00:00
|
|
|
" Maintainer: based on work by Alin M Elena available at https://gitorious.org/cp2k-vim
|
2013-12-10 14:31:19 +00:00
|
|
|
" Revision: 13th of September 2010
|
2016-11-18 14:04:43 +00:00
|
|
|
" History:
|
2013-12-10 14:31:19 +00:00
|
|
|
" - XSLT dump and improved syntax highlighting (10.12.2013, Matthias Krack)
|
2013-12-13 14:45:50 +00:00
|
|
|
" - Folding and automatic indentation added (13.12.2013, Matthias Krack)
|
2016-11-18 14:04:43 +00:00
|
|
|
" - Remove folding since it overrides user's defaults (18.11.2016, Patrick Seewald)
|
2019-03-13 18:16:36 +01:00
|
|
|
" CP2K-Version: <xsl:value-of select="/CP2K_INPUT/CP2K_VERSION"/> (<xsl:value-of select="/CP2K_INPUT/COMPILE_REVISION"/>)
|
2013-12-09 14:49:58 +00:00
|
|
|
|
|
|
|
|
if exists("b:current_syntax")
|
2013-12-13 14:45:50 +00:00
|
|
|
finish
|
2013-12-09 14:49:58 +00:00
|
|
|
endif
|
2013-12-13 14:45:50 +00:00
|
|
|
let b:current_syntax = "cp2k"
|
2013-12-09 14:49:58 +00:00
|
|
|
|
|
|
|
|
syn case ignore
|
|
|
|
|
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" CP2K numbers used in blocks
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" Regular int like number with - + or nothing in front
|
|
|
|
|
" e.g. 918, or -49
|
|
|
|
|
|
|
|
|
|
syn match cp2kNumber '\d\+'
|
|
|
|
|
syn match cp2kNumber '[-+]\d\+'
|
|
|
|
|
|
|
|
|
|
" Floating point number with decimal no E or e (+,-)
|
|
|
|
|
" e.g. 0.198781, or -3.141592
|
|
|
|
|
|
|
|
|
|
syn match cp2kNumber '\d\+\.\d*'
|
|
|
|
|
syn match cp2kNumber '[-+]\d\+\.\d*'
|
|
|
|
|
|
|
|
|
|
" Floating point like number with E and no decimal point (+,-)
|
|
|
|
|
" e.g. 3E+9, 3e+09, or -3e+02
|
|
|
|
|
|
|
|
|
|
syn match cp2kNumber '[-+]\=\d[[:digit:]]*[eE][\-+]\=\d\+'
|
|
|
|
|
syn match cp2kNumber '\d[[:digit:]]*[eE][\-+]\=\d\+'
|
|
|
|
|
|
|
|
|
|
" Floating point like number with E and decimal point (+,-)
|
|
|
|
|
" e.g. -3.9188e+09, or 0.9188E-93
|
|
|
|
|
|
|
|
|
|
syn match cp2kNumber '[-+]\=\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+'
|
|
|
|
|
syn match cp2kNumber '\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+'
|
|
|
|
|
|
2013-12-10 14:31:19 +00:00
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" CP2K Boolean entities
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
|
2013-12-09 14:49:58 +00:00
|
|
|
syn keyword cp2kBool true false T F yes no
|
|
|
|
|
|
|
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
" CP2K comments
|
|
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
|
|
|
|
|
syn keyword cp2kTodo TODO FIXME NOTE REMARK
|
|
|
|
|
syn match cp2kComment "#.*$" contains=cp2kTodo
|
|
|
|
|
syn match cp2kComment "!.*$" contains=cp2kTodo
|
|
|
|
|
|
2013-12-10 14:31:19 +00:00
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" CP2K predefined constants
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
<xsl:for-each-group select="//ITEM" group-by="NAME">
|
|
|
|
|
<xsl:sort select="NAME"/>
|
|
|
|
|
syn keyword cp2kConstant <xsl:value-of select="NAME"/>
|
|
|
|
|
</xsl:for-each-group>
|
2013-12-09 14:49:58 +00:00
|
|
|
|
2013-12-10 14:31:19 +00:00
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" CP2K sections
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
<xsl:for-each-group select="//SECTION" group-by="NAME">
|
|
|
|
|
<xsl:sort select="NAME"/>
|
|
|
|
|
syn keyword cp2kSection <xsl:value-of select="NAME"/>
|
|
|
|
|
</xsl:for-each-group>
|
|
|
|
|
syn keyword cp2kSection END
|
2023-12-12 17:34:34 +01:00
|
|
|
syn keyword cp2kSection ENDIF
|
2013-12-10 22:41:21 +00:00
|
|
|
syn match cp2kBegSection '^\s*&\w\+' contains=cp2kSection
|
|
|
|
|
syn match cp2kEndSection '^\s*&END\s*\w\+' contains=cp2kSection
|
2013-12-09 14:49:58 +00:00
|
|
|
|
2013-12-10 14:31:19 +00:00
|
|
|
"----------------------------------------------------------------/
|
2023-12-13 13:06:38 +01:00
|
|
|
" CP2K default keyword names
|
2013-12-10 14:31:19 +00:00
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
<xsl:for-each-group select="//KEYWORD" group-by="NAME[@type='default']">
|
|
|
|
|
<xsl:sort select="NAME[@type='default']"/>
|
2022-12-13 14:00:14 +01:00
|
|
|
<xsl:if test="NAME[@type='default']!=''">
|
2023-12-13 13:06:38 +01:00
|
|
|
syn keyword cp2kKeyword <xsl:value-of select="NAME[@type='default']"/>
|
|
|
|
|
</xsl:if>
|
|
|
|
|
</xsl:for-each-group>
|
|
|
|
|
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
" CP2K alias keyword names
|
|
|
|
|
"----------------------------------------------------------------/
|
|
|
|
|
<xsl:for-each-group select="//KEYWORD" group-by="NAME[@type='alias'][1]">
|
|
|
|
|
<xsl:sort select="NAME[@type='alias'][1]"/>
|
|
|
|
|
<xsl:if test="NAME[@type='alias']!=''">
|
|
|
|
|
syn keyword cp2kKeyword <xsl:value-of select="NAME[@type='alias']"/>
|
2022-12-13 14:00:14 +01:00
|
|
|
</xsl:if>
|
2013-12-10 14:31:19 +00:00
|
|
|
</xsl:for-each-group>
|
2013-12-09 14:49:58 +00:00
|
|
|
|
2013-12-10 14:31:19 +00:00
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
" CP2K preprocessing directives
|
|
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
|
2024-01-15 18:44:51 +01:00
|
|
|
syn keyword cp2kPreProc ENDIF FFTYPE IF INCLUDE PRINT SET XCTYPE
|
2013-12-10 22:41:21 +00:00
|
|
|
|
|
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
" CP2K strings
|
|
|
|
|
"-----------------------------------------------------------------/
|
|
|
|
|
|
|
|
|
|
syn region cp2kString matchgroup=cp2kStringDelimiter start=+"+ end=+"+
|
|
|
|
|
syn region cp2kString matchgroup=cp2kStringDelimiter start=+'+ end=+'+
|
|
|
|
|
syn region cp2kString matchgroup=cp2kStringDelimiter start=+`+ end=+`+
|
2013-12-10 14:31:19 +00:00
|
|
|
|
2013-12-09 14:49:58 +00:00
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
" Final setup
|
|
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
|
2013-12-13 14:45:50 +00:00
|
|
|
setlocal autoindent
|
|
|
|
|
setlocal expandtab
|
2024-01-12 12:11:43 +01:00
|
|
|
setlocal iskeyword+=-
|
2013-12-09 14:49:58 +00:00
|
|
|
|
2013-12-13 09:03:55 +00:00
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
" Indentation support for CP2K input syntax
|
|
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
|
|
|
|
|
if exists("b:did_indent")
|
|
|
|
|
finish
|
|
|
|
|
endif
|
|
|
|
|
let b:did_indent = 1
|
|
|
|
|
|
|
|
|
|
setlocal indentexpr=GetCp2kIndent()
|
2023-12-12 17:34:34 +01:00
|
|
|
setlocal indentkeys+=0=~&END,0=~@ENDIF,0=#,0=@
|
2013-12-13 09:03:55 +00:00
|
|
|
setlocal nosmartindent
|
|
|
|
|
|
|
|
|
|
if exists("*GetCp2kIndent")
|
|
|
|
|
finish
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
function! GetCp2kIndent()
|
|
|
|
|
let lnum = prevnonblank(v:lnum - 1)
|
|
|
|
|
if lnum == 0
|
|
|
|
|
return 0
|
|
|
|
|
endif
|
|
|
|
|
let ind = indent(lnum)
|
|
|
|
|
let line = getline(lnum)
|
2023-12-12 17:34:34 +01:00
|
|
|
if line =~ '^\s*\c\%(&\|@IF\)'
|
2013-12-13 09:03:55 +00:00
|
|
|
let ind += &shiftwidth
|
2023-12-12 17:34:34 +01:00
|
|
|
if line =~ '^\s*\c\%(&END\|@ENDIF\)\>'
|
2013-12-13 09:03:55 +00:00
|
|
|
let ind -= &shiftwidth
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
let line = getline(v:lnum)
|
2023-12-12 17:34:34 +01:00
|
|
|
if line =~ '^\s*\c\%(&END\|@ENDIF\)\>'
|
2013-12-13 09:03:55 +00:00
|
|
|
let ind -= &shiftwidth
|
|
|
|
|
endif
|
|
|
|
|
return ind
|
|
|
|
|
endfunction
|
|
|
|
|
|
2013-12-09 14:49:58 +00:00
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
" CP2K keyword highlighting rules
|
|
|
|
|
"----------------------------------------------------------------------------/
|
|
|
|
|
|
2013-12-10 22:41:21 +00:00
|
|
|
hi def link cp2kComment Comment
|
|
|
|
|
hi def link cp2kConstant Constant
|
|
|
|
|
hi def link cp2kTodo Todo
|
|
|
|
|
hi def link cp2kBool Boolean
|
|
|
|
|
hi def link cp2kNumber Number
|
|
|
|
|
hi def link cp2kKeyword Keyword
|
|
|
|
|
hi def link cp2kSection Structure
|
|
|
|
|
hi def link cp2kPreProc PreProc
|
|
|
|
|
hi def link cp2kString String
|
|
|
|
|
hi def link cp2kStringDelimiter Delimiter
|
2013-12-09 14:49:58 +00:00
|
|
|
</xsl:template>
|
|
|
|
|
</xsl:stylesheet>
|