Add FERM support (#311)
This commit is contained in:
parent
f05b47874b
commit
d4da7817ba
@ -68,6 +68,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
||||
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
||||
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
||||
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
||||
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax)
|
||||
- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent)
|
||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
||||
|
@ -297,6 +297,14 @@ au BufNewFile,BufRead *.erl,*.hrl,rebar.config,*.app,*.app.src,*.yaws,*.xrl,*.es
|
||||
augroup end
|
||||
endif
|
||||
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ferm') == -1
|
||||
augroup filetypedetect
|
||||
" ferm, from ferm.vim in vim-scripts/ferm.vim
|
||||
autocmd BufNewFile,BufRead ferm.conf setf ferm
|
||||
autocmd BufNewFile,BufRead *.ferm setf ferm
|
||||
augroup end
|
||||
endif
|
||||
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||
augroup filetypedetect
|
||||
" fsharp, from fsharp.vim in fsharp/vim-fsharp:_BASIC
|
||||
|
207
syntax/ferm.vim
Normal file
207
syntax/ferm.vim
Normal file
@ -0,0 +1,207 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ferm') == -1
|
||||
|
||||
"============================================================================
|
||||
" ferm syntax highlighter
|
||||
"
|
||||
" Language: ferm; "For Easy Rule Making", a frontend for iptables
|
||||
" Ferm Info: http://ferm.foo-projects.org/
|
||||
" Version: 0.03
|
||||
" Date: 2013-01-09
|
||||
" Maintainer: Benjamin Leopold <benjamin-at-cometsong-dot-net>
|
||||
" URL: http://github.com/cometsong/ferm.vim
|
||||
" Credits: Modeled after Eric Haarbauer's iptables syntax file.
|
||||
"
|
||||
"============================================================================
|
||||
" Section: Initialization {{{1
|
||||
"============================================================================
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if !exists("main_syntax")
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
let main_syntax = 'ferm'
|
||||
endif
|
||||
|
||||
" Don't use standard HiLink, it will not work with included syntax files
|
||||
if version < 508
|
||||
command! -nargs=+ FermHiLink highlight link <args>
|
||||
else
|
||||
command! -nargs=+ FermHiLink highlight default link <args>
|
||||
endif
|
||||
|
||||
syntax case match
|
||||
|
||||
if version < 600
|
||||
set iskeyword+=-
|
||||
else
|
||||
setlocal iskeyword+=-
|
||||
endif
|
||||
|
||||
" Initialize global public variables: {{{2
|
||||
|
||||
" Support deprecated variable name used prior to release 1.07.
|
||||
if exists("g:fermSpecialDelimiters") &&
|
||||
\ !exists("g:Ferm_SpecialDelimiters")
|
||||
|
||||
let g:Ferm_SpecialDelimiters = g:fermSpecialDelimiters
|
||||
unlet g:fermSpecialDelimiters
|
||||
" echohl WarningMsg | echo "Warning:" | echohl None
|
||||
" echo "The g:fermSpecialDelimiters variable is deprecated."
|
||||
" echo "Please use g:Ferm_SpecialDelimiters in your .vimrc instead"
|
||||
|
||||
endif
|
||||
|
||||
if exists("g:Ferm_SpecialDelimiters")
|
||||
let s:Ferm_SpecialDelimiters = g:Ferm_SpecialDelimiters
|
||||
else
|
||||
let s:Ferm_SpecialDelimiters = 0
|
||||
endif
|
||||
|
||||
"============================================================================
|
||||
" Section: Syntax Definitions {{{1
|
||||
"============================================================================
|
||||
|
||||
syntax keyword fermLocation domain table chain policy @subchain
|
||||
|
||||
syntax keyword fermMatch interface outerface protocol proto
|
||||
\ saddr daddr fragment sport dport syn module mod
|
||||
|
||||
syntax keyword fermBuiltinChain
|
||||
\ INPUT OUTPUT FORWARD PREROUTING POSTROUTING
|
||||
|
||||
syntax match fermInterface "[eth|ppp]\d"
|
||||
|
||||
syntax keyword fermTable filter nat mangle raw
|
||||
|
||||
" TODO: check the use of duplicate terms in two syntax defs; then enable (arp|eb) tables.
|
||||
"syntax keyword fermArpTables source-ip destination-ip source-mac destination-mac
|
||||
"\ interface outerface h-length opcode h-type proto-type
|
||||
"\ mangle-ip-s mangle-ip-d mangle-mac-s mangle-mac-d mangle-target
|
||||
"syntax keyword fermEbTables proto interface outerface logical-in logical-out saddr daddr
|
||||
"\ 802.3 arp ip mark_m pkttype stp vlan log
|
||||
|
||||
syntax keyword fermTarget
|
||||
\ ACCEPT DROP QUEUE RETURN BALANCE CLASSIFY CLUSTERIP CONNMARK
|
||||
\ CONNSECMARK CONNTRACK DNAT DSCP ECN HL IPMARK IPV4OPSSTRIP LOG
|
||||
\ MARK MASQUERADE MIRROR NETMAP NFLOG NFQUEUE NOTRACK REDIRECT REJECT
|
||||
\ ROUTE SAME SECMARK SET SNAT TARPIT TCPMSS TOS TRACE TTL ULOG XOR
|
||||
|
||||
syntax keyword fermModuleName contained
|
||||
\ account addrtype ah childlevel comment condition connbytes connlimit
|
||||
\ connmark connrate conntrack dccp dscp dstlimit ecn esp fuzzy hashlimit
|
||||
\ helper icmp iprange ipv4options length limit lo mac mark mport multiport
|
||||
\ nth osf owner physdev pkttype policy psd quota random realm recent
|
||||
\ sctp set state string tcp tcpmss time tos ttl u32 udp unclean
|
||||
|
||||
syntax keyword fermModuleType
|
||||
\ UNSPEC UNICAST LOCAL BROADCAST ANYCAST MULTICAST BLACKHOLE UNREACHABLE
|
||||
\ PROHIBIT THROW NAT XRESOLVE INVALID ESTABLISHED NEW RELATED SYN ACK FIN
|
||||
\ RST URG PSH ALL NONE
|
||||
|
||||
" From --reject-with option
|
||||
syntax keyword fermModuleType
|
||||
\ icmp-net-unreachable
|
||||
\ icmp-host-unreachable
|
||||
\ icmp-port-unreachable
|
||||
\ icmp-proto-unreachable
|
||||
\ icmp-net-prohibited
|
||||
\ icmp-host-prohibited
|
||||
\ icmp-admin-prohibited
|
||||
|
||||
" From --icmp-type option
|
||||
syntax keyword fermModuleType
|
||||
\ any
|
||||
\ echo-reply
|
||||
\ destination-unreachable
|
||||
\ network-unreachable
|
||||
\ host-unreachable
|
||||
\ protocol-unreachable
|
||||
\ port-unreachable
|
||||
\ fragmentation-needed
|
||||
\ source-route-failed
|
||||
\ network-unknown
|
||||
\ host-unknown
|
||||
\ network-prohibited
|
||||
\ host-prohibited
|
||||
\ TOS-network-unreachable
|
||||
\ TOS-host-unreachable
|
||||
\ communication-prohibited
|
||||
\ host-precedence-violation
|
||||
\ precedence-cutoff
|
||||
\ source-quench
|
||||
\ redirect
|
||||
\ network-redirect
|
||||
\ host-redirect
|
||||
\ TOS-network-redirect
|
||||
\ TOS-host-redirect
|
||||
\ echo-request
|
||||
\ router-advertisement
|
||||
\ router-solicitation
|
||||
\ time-exceeded
|
||||
\ ttl-zero-during-transit
|
||||
\ ttl-zero-during-reassembly
|
||||
\ parameter-problem
|
||||
\ ip-header-bad
|
||||
\ required-option-missing
|
||||
\ timestamp-request
|
||||
\ timestamp-reply
|
||||
\ address-mask-request
|
||||
\ address-mask-reply
|
||||
|
||||
" TODO: check ferm "$variable" & "&function" character matches
|
||||
syntax match fermVariable "$[_A-Za-z0-9]+"
|
||||
syntax keyword fermVarDefine @def
|
||||
|
||||
syntax keyword fermFunction @if @else @include @hook
|
||||
\ @eq @ne @not @resolve @cat @substr @length
|
||||
\ @basename @dirname @ipfilter
|
||||
|
||||
syntax keyword fermUserFunction "&[_A-Za-z0-9]+"
|
||||
|
||||
syntax region fermString start=+"+ skip=+\\"+ end=+"+
|
||||
syntax region fermString start=+'+ skip=+\\'+ end=+'+
|
||||
|
||||
syntax region fermCommand start=+`+ skip=+\\'+ end=+`+
|
||||
|
||||
syntax match fermComment "#.*"
|
||||
|
||||
"============================================================================
|
||||
" Section: Group Linking {{{1
|
||||
"============================================================================
|
||||
|
||||
FermHiLink fermLocation Title
|
||||
FermHiLink fermMatch Special
|
||||
FermHiLink fermTable ErrorMsg
|
||||
FermHiLink fermBuiltinChain Underlined
|
||||
FermHiLink fermTarget Statement
|
||||
FermHiLink fermFunction Identifier
|
||||
FermHiLink fermUserFunction Function
|
||||
FermHiLink fermModuleName PreProc
|
||||
FermHiLink fermModuleType Type
|
||||
FermHiLink fermVarDefine PreProc
|
||||
FermHiLink fermVariable Operator
|
||||
FermHiLink fermString Constant
|
||||
FermHiLink fermCommand Identifier
|
||||
FermHiLink fermComment Comment
|
||||
|
||||
"============================================================================
|
||||
" Section: Clean Up {{{1
|
||||
"============================================================================
|
||||
|
||||
delcommand FermHiLink
|
||||
|
||||
let b:current_syntax = "ferm"
|
||||
|
||||
if main_syntax == 'ferm'
|
||||
unlet main_syntax
|
||||
endif
|
||||
|
||||
" Autoconfigure vim indentation settings
|
||||
" vim:ts=4:sw=4:sts=4:fdm=marker:iskeyword+=-
|
||||
|
||||
|
||||
endif
|
Loading…
Reference in New Issue
Block a user