snippet impl
	implicit none
		$0
snippet prog
	program ${1:main}
		$0
	end program $1
snippet mod
	module ${1:modulename}
		$0
	end module $1
snippet proc
	procedure ${1:name}
		${0}
	end procedure $1
snippet iface
	interface ${1:name}
		${0}
	end interface $1
snippet doc
	! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	! File: ${2:`vim_snippets#Filename('$1')`}
	! Author: `g:snips_author`
	! Email: `g:snips_email`
	! Github: `g:snips_github`
	! Description: $1
	! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	$0
snippet dox
	!> @brief ${1}
	!!
	!> ${2}
	!> @author `g:snips_author`
	${0}
snippet doxp
	!> @param[${1}]${0}
# Variables definitions
# Boolean
snippet bool
	logical :: $0
# Integer
snippet int
	integer :: $0
snippet real
	real :: $0
# Double Precision
snippet double
	double precision :: $0
# Char
snippet str
	character(len=${1:*}) :: ${0:}
# Types
snippet type
	type(${1:name})
		$0
	end type
snippet const
	${1:type}, parameter :: $2 = $0
snippet arr
	${1:type}, ${2:allocatable, }dimension(${3::}) :: $0
snippet intent
	${1:type}, intent(inout) :: $0
# Array
snippet /
	(/ $1 /) ${2:,&} $0
snippet if
	if (${1:condition}) then
		$0
	end if
snippet case
	select case (${1:expr})
		case ($2)
		case default
			$3
	end select $0
snippet do
	do ${1:i} = ${2:start}, ${3:end}, ${4:incr}
		$0
	end do
snippet dow
	do while (${1:condition})
		$2
	end do
snippet sub
	subroutine ${1:name}($2)
		$0
	end subroutine $1
snippet func
	function ${1:name}($2) result($3)
		$0
	end function $1
snippet pr
	write(*,*) $0
snippet dpr
	write(*,*) '$1 = ', $1
snippet read
	read(unit = ${1:fp}, file = ${2:filename}, iostat = ${3:ierr}) $0
snippet write
	write(unit = ${1:fp}, file = ${2:filename}, iostat = ${3:ierr}) $0
snippet open
	open(unit = ${1:fp}, file = ${2:filename}, status = ${3:unknown}, iostat = ${4:ierr}) $0
snippet close
	close(unit = ${1:fp}) $0