extends html

# Freemarker version
snippet ver "${.version}"
	\${.version}
# Interpolation
snippet int "${interpolation}"
	\${${0:interpolation${VISUAL}}\}
# Interpolation with default string
snippet intd "${interpolation!"default_string"}"
	\${${0:interpolation${VISUAL}}!"${1:default_string}"\}
# Comment
snippet com "<#-- comment -->"
	<#-- ${0:comment${VISUAL}} -->
# Variable assignment on a single line
snippet ass "<#assign variable_name = value />"
	<#assign ${1:variable_name} = ${0:value${VISUAL}} />
# Variable assignments on multiple lines
snippet assm "<#assign <#-- multiple lines --> />"
	<#assign
		${1:variable_name} = ${0:value${VISUAL}}
	/>
# Local variable assignment on a single
snippet loc "<#local variable_name = value />"
	<#local ${1:variable_name} = ${0:value${VISUAL}} />
# Local variable assignments on multiple lines
snippet locm "<#local <#-- multiple lines --> />"
	<#local
		${1:variable_name} = ${0:value${VISUAL}}
	/>
# Include Freemarker file
snippet inc "<#include \"file.ftl\" />"
	<#include "${0:file.ftl${VISUAL}}" />
# If statement
snippet if "<#if condition>...</#if>"
	<#if ${1:true}>
		${0:${VISUAL}}
	</#if>
# If/else statement
snippet ife "<#if condition>...<#else>...</#if>"
	<#if ${1:true}>
		${0:${VISUAL}}
	<#else>
		${2}
	</#if>
# Iteration over a sequence
snippet lis "<#list sequence as element>...</#list>"
	<#list ${1:sequence} as ${2:element}>
		${0:${VISUAL}}
	</#list>
# Iteration over an hashmap
snippet lish "<#list hashmap?keys as element>...</#list>"
	<#list ${1:hashmap}?keys as ${2:key}>
		\${$2\}: \${$1[$2]\}${0:${VISUAL}}
	</#list>
# Macro statement
snippet mac "<#macro macro_name param1>...</#macro>"
	<#macro ${1:macro_name} ${2:param1}>
		${0:${VISUAL}}
	</#macro>
# Function statement
snippet fun "<#function function_name param1>...</#function>"
	<#function ${1:function_name} ${2:param1}>
		${0:${VISUAL}}
	</#function>
# Attempt statement (try-catch to prevent runtime exceptions)
snippet att "<#attempt>...<#recover></#attempt>"
	<#attempt>
		${0:${VISUAL}}
	<#recover>
	</#attempt>
# Then built-in for booleans
snippet ?th "?then(true, false)"
	?then(${1:true}, ${0:false${VISUAL}})