### Nano synteax file
### Icinga2 object configuration file 

syntax 	"icinga2" "/etc/icinga2/.*\.conf$" "/usr/share/icinga2/include/(plugin|itl|.*\.conf$)"

## objects types
icolor brightgreen 		"object[ \t]+(host|hostgroup|service|servicegroup|user|usergroup)"
icolor brightgreen 		"object[ \t]+(checkcommand|notificationcommand|eventcommand|notification)"
icolor brightgreen 		"object[ \t]+(timeperiod|scheduleddowntime|dependency|perfdatawriter)"
icolor brightgreen 		"object[ \t]+(graphitewriter|idomysqlconnection|idomysqlconnection)"
icolor brightgreen 		"object[ \t]+(livestatuslistener|externalcommandlistener)"
icolor brightgreen 		"object[ \t]+(compatlogger|checkresultreader|checkcomponent|notificationcomponent)"
icolor brightgreen 		"object[ \t]+(filelogger|sysloglogger|journaldlogger|apilistener|endpoint|zone)"

## apply def
icolor brightgreen 		"apply[ \t]+(Service|Dependency|Notification|ScheduledDowntime)"


## objects attributes
icolor red 		"(^|^\s+)(accept_commands|accept_config|action_url|address|address6|arguments|author|bind_host)"
icolor red 		"(^|^\s+)(bind_port|ca_path|categories|cert_path|check_command|check_interval)"
icolor red 		"(^|^\s+)(check_period|child_host_name|child_service_name|cleanup|command|command_endpoint|command_path)"
icolor red 		"(^|^\s+)(comment|compat_log_path|crl_path|database|disable_checks|disable_notifications)"
icolor red 		"(^|^\s+)(display_name|duration|email|enable_active_checks|enable_event_handler)"
icolor red 		"(^|^\s+)(enable_flapping|enable_ha|enable_notifications|enable_passive_checks|enable_perfdata)"
icolor red 		"(^|^\s+)(endpoints|env|event_command|failover_timeout|fixed|flapping_threshold|groups|host)"
icolor red 		"(^|^\s+)(host_format_template|host_name|host_name_template|host_perfdata_path|host_temp_path|icon_image)"
icolor red 		"(^|^\s+)(icon_image_alt|instance_description|instance_name|interval|key_path|log_dir)"
icolor red 		"(^|^\s+)(log_duration|max_check_attempts|methods|name|notes|notes_url|objects_path)"
icolor red 		"(^|^\s+)(pager|parent|parent_host_name|parent_service_name|password|path|period)"
icolor red 		"(^|^\s+)(port|ranges|retry_interval|rotation_interval|rotation_method)"
icolor red 		"(^|^\s+)(service_format_template|service_name|service_name_template|service_perfdata_path|service_temp_path)"
icolor red 		"(^|^\s+)(severity|socket_path|socket_type|spool_dir|states|status_path|table_prefix)"
icolor red 		"(^|^\s+)(timeout|times|types|update_interval|user|user_groups|users|volatile|zone)"
icolor red 		"(^|^\s+)(vars\.\w+)"


## keywords
icolor red 		"(^|^\s+)|(icinga2Keyword|template|const|import|include|include_recursive|var|function|return|to|use|locals|globals|this)\s+"

## Assign conditions
icolor magenta 	"(assign|ignore)[ \t]+where"

## Global functions
icolor white 	"(regex|match|len|union|intersection|keys|string|number|bool|random|log|typeof|get_time|exit)"

## Accessor Functions
icolor white 	"(get_host|get_service|get_user|get_check_command|get_event_command|get_notification_command)"
icolor white 	"(get_host_group|get_service_group|get_user_group|get_time_period)"


## Math functions
icolor white	"(Math.E|Math.LN2|Math.LN10|Math.LOG2E|Math.PI|Math.SQRT1_2|Math.SQRT2)"
icolor white	"(Math.abs|Math.acos|Math.asin|Math.atan|Math.atan2|Math.ceil|Math.cos)"
icolor white	"(Math.exp|Math.floor|Math.isinf|Math.isnan|Math.log|Math.max|Math.min)"
icolor white	"(Math.pow|Math.random|Math.round|Math.sign|Math.sin|Math.sqrt|Math.tan)"

## Json functions
icolor white 	"(Json.encode|Json.decode)"

## String functions
icolor white	"(\.to_string)"
icolor white	"(\.find)"
icolor white	"(\.contains)"
icolor white	"(\.len)"
icolor white	"(\.lower)"
icolor white	"(\.upper)"
icolor white	"(\.replace)"
icolor white	"(\.split)"
icolor white	"(\.substr)"

## Array and Dict  Functions
icolor white	"(\.add)"
icolor white	"(\.clear)"
icolor white	"(\.clone)"
icolor white	"(\.contains)"
icolor white	"(\.len)"
icolor white	"(\.remove)"
icolor white	"(\.set)"
icolor white	"(\.remove)"
icolor white	"(\.sort)"
icolor white	"(\.join)"
icolor white	"(\.clone)"
icolor white	"(\.call)"
icolor white	"(\.callv)"


## Conditional statements
icolor white	"(if|else)"

## Loops
icolor white	"(while|for|break|continue)"

## Operators
icolor green		"\s(\.)\s"
icolor green		"\s(!)\s"
icolor green		"\s(\~)\s"
icolor green		"\s(\+)\s"
icolor green		"\s(-)\s"
icolor green		"\s(\*)\s"
icolor green		"\s(/)\s"
icolor green		"\s(%)\s"
icolor green		"\s(=)\s"
icolor green		"\s(<)\s"
icolor green		"\s(>)\s"
icolor green		"\s(<<)\s"
icolor green		"\s(>>)\s"
icolor green		"\s(<=)\s"
icolor green		"\s(>=)\s"
icolor green		"\s(in)\s"
icolor green		"\s(!in)\s"
icolor green		"\s(==)\s"
icolor green		"\s(!=)\s"
icolor green		"\s(&)\s"
icolor green		"\s(\^)\s"
icolor green		"\s(|)\s"
icolor green		"\s(&&)\s"
icolor green		"\s(||)\s"
icolor green		"\s(=>)\s"
icolor green		"\s(\+=)\s"
icolor green		"\s(-=)\s"
icolor green		"\s(\*=)\s"
icolor green		"\s(/=)\s"

## Global constats
icolor yellow 	"(PrefixDir|SysconfDir|ZonesDir|LocalStateDir|RunDir|PkgDataDir|StatePath|ObjectsPath)"
icolor yellow 	"(PidPath|NodeName|ApplicationType|EnableNotifications|EnableEventHandlers|EnableFlapping)"
icolor yellow 	"(EnableHostChecks|EnableServiceChecks|EnablePerfdata|UseVfork|RunAsUser|RunAsGroup|PluginDir)"
icolor yellow 	"(Vars\s+)"

## Boolean
icolor blue 	"(true|false)"

# Null
icolor blue  	"(null)"


## comments
color brightblue 	"\/\/.*"
color brightblue  	"^[ \t]*\*\($\|[ \t]\+\)"
color brightblue 	start="/\*"  end="\*/"

## Braces and Parens definition
# - Braces are used in dictionary definition

color magenta 	"(\(|\))"
color magenta 	"(\[|\])"
color magenta 	"(\{|\})"

## type definitions
# - double quotes "
# - single quotes '
# - brackets <>

color brightyellow		"'"
color brightyellow		"""
color brightyellow  	start="<"   end=">"
