From d4da7817bacda51263f16e7dd82da15c7046e905 Mon Sep 17 00:00:00 2001 From: Dan Reif Date: Tue, 5 Jun 2018 14:22:06 -0700 Subject: [PATCH] Add FERM support (#311) --- README.md | 1 + ftdetect/polyglot.vim | 8 ++ syntax/ferm.vim | 207 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 syntax/ferm.vim diff --git a/README.md b/README.md index bcb4258..7db8c0d 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index ccbd2fa..0a4d36d 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -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 diff --git a/syntax/ferm.vim b/syntax/ferm.vim new file mode 100644 index 0000000..bfe1fd4 --- /dev/null +++ b/syntax/ferm.vim @@ -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 +" 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 +else + command! -nargs=+ FermHiLink highlight default link +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