<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>comment</key>
	<string>?i: has to be added everywhere because fortran is case insensitive; NB: order of matching matters</string>
	<key>fileTypes</key>
	<array>
		<string>f</string>
		<string>F</string>
		<string>f77</string>
		<string>F77</string>
		<string>for</string>
		<string>FOR</string>
		<string>fpp</string>
		<string>FPP</string>
	</array>
	<key>injections</key>
	<dict>
		<key>source.fortran - (source.fortran.modern)</key>
		<dict>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>^[Cc](?=\b|[Cc])</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.comment.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>$\n?</string>
					<key>name</key>
					<string>comment.line.c.fortran</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>match</key>
							<string>\\\s*\n</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string>^\*</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.comment.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>$\n?</string>
					<key>name</key>
					<string>comment.line.asterisk.fortran</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>match</key>
							<string>\\\s*\n</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
	</dict>
	<key>name</key>
	<string>Fortran - Punchcard</string>
	<key>patterns</key>
	<array>
		<dict>
			<key>include</key>
			<string>#preprocessor-rule-enabled</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#preprocessor-rule-disabled</string>
		</dict>
		<dict>
			<key>include</key>
			<string>#preprocessor-rule-other</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>built-in constants</string>
			<key>match</key>
			<string>(?i:(r8|r4|\.TRUE\.|\.FALSE\.))</string>
			<key>name</key>
			<string>constant.language.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>numbers</string>
			<key>match</key>
			<string>\b[\+\-]?[0-9]+\.?[0-9a-zA-Z_]*\b</string>
			<key>name</key>
			<string>constant.numeric.fortran</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>(?x:								# extended mode
					^
					\s*									# start of line and possibly some space
					([a-zA-Z\(\)]*)(?&lt;!end)				# 1: possibly some type specification but not the word end
					\s*									# possibly some space
					(?i:(function|subroutine))\b		# 2: function or subroutine
					\s+									# some space
					([A-Za-z_][A-Za-z0-9_]*)			# 3: name
					)</string>
			<key>beginCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>storage.type.fortran</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>storage.type.function.fortran</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>entity.name.function.fortran</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>First line of function/subroutine definition</string>
			<key>end</key>
			<string>(?x:									# extended mode
					((?i:end))							# 1: the word end
					(									# followed by
						$								# end of line
					|									# or
						\s*								# possibly some space
						(?i:(function|subroutine))		# 2: function or subroutine
						((\s+[A-Za-z_][A-Za-z0-9_]*)?)	# 3: possibly the name
					)
					)</string>
			<key>endCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>keyword.other.fortran</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>storage.type.function.fortran</string>
				</dict>
				<key>4</key>
				<dict>
					<key>name</key>
					<string>entity.name.function.end.fortran</string>
				</dict>
			</dict>
			<key>name</key>
			<string>meta.function.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>\G\s*(\()</string>
					<key>beginCaptures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.parameters.begin.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>\)</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.parameters.end.fortran</string>
						</dict>
					</dict>
					<key>patterns</key>
					<array>
						<dict>
							<key>captures</key>
							<dict>
								<key>1</key>
								<dict>
									<key>name</key>
									<string>variable.parameter.fortran</string>
								</dict>
								<key>2</key>
								<dict>
									<key>name</key>
									<string>punctuation.separator.arguments.fortan</string>
								</dict>
							</dict>
							<key>match</key>
							<string>([^\s),]*)\s*(,)?</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>include</key>
					<string>$base</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>begin</key>
			<string>\b(?i:(integer|real|double\s+precision|complex|logical|character))\b(?=.*::)</string>
			<key>beginCaptures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>storage.type.fortran</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>Line of type specification</string>
			<key>end</key>
			<string>(?=!)|$</string>
			<key>name</key>
			<string>meta.specification.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>$base</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>comment</key>
			<string>statements controling the flow of the program</string>
			<key>match</key>
			<string>\b(?i:(go\s*to|assign|to|if|then|else|elseif|end\s*if|continue|stop|pause|do|end\s*do|while|cycle))\b</string>
			<key>name</key>
			<string>keyword.control.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>programming units</string>
			<key>match</key>
			<string>\b(?i:(program|end\s+program|entry|block\s+data|call|return|contains|include))\b</string>
			<key>name</key>
			<string>keyword.control.programming-units.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>i/o statements</string>
			<key>match</key>
			<string>\b(?i:(open|close|read|write|print|inquire|backspace|endfile|format))\b</string>
			<key>name</key>
			<string>keyword.control.io.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>operators</string>
			<key>match</key>
			<string>((?&lt;!\=)\=(?!\=)|\-|\+|\/\/|\/|(?!^)\*|::)</string>
			<key>name</key>
			<string>keyword.operator.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>logical operators</string>
			<key>match</key>
			<string>(?i:(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.))</string>
			<key>name</key>
			<string>keyword.operator.logical.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>argument related intrisics</string>
			<key>match</key>
			<string>\b(?i:(present)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.argument.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>numeric intrisics</string>
			<key>match</key>
			<string>\b(?i:(abs|aimag|aint|anint|cmplx|conjg|dble|dim|dprod|int|max|min|mod|nint|real|sign|digits|epsilon|huge|maxexponent|minexponent|precision|radix|range|tiny)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.numeric.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>character string intrinsics</string>
			<key>match</key>
			<string>\b(?i:(achar|adjustl|adjustr|char|iachar|ichar|index|len_trim|repeat|scan|string|trim|verify|len)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.string.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>mathematical intrisics</string>
			<key>match</key>
			<string>\b(?i:(((acos|asin|atan|atan2|cos|cosh|exp|log|log10|sin|sinh|sqrt|tan|tanh)(?=\())|(random_number|random_seed)))\b</string>
			<key>name</key>
			<string>keyword.other.instrisic.math.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>data kind intrinsics</string>
			<key>match</key>
			<string>\b(?i:(kind|selected_int_kind|selected_real_kind|transfer)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.data.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>logical intrinsics</string>
			<key>match</key>
			<string>\b(?i:(logical)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.logical.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>bit operations intrinsics</string>
			<key>match</key>
			<string>\b(?i:(((bit_size|btest|iand|ibclr|ibits|ibset|ieor|ior|ishift|ishiftc|not)(?=\())|mvbits))\b</string>
			<key>name</key>
			<string>keyword.other.instrisic.bit.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>floating point intrinsics</string>
			<key>match</key>
			<string>\b(?i:(exponent|fraction|nearest|rrspacing|scale|set_exponent|spacing)(?=\())</string>
			<key>name</key>
			<string>keyword.other.instrisic.floating-point.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>matrix/vector/array intrisics</string>
			<key>match</key>
			<string>\b(?i:(((dot_product|sum|matmul|transpose|all|any|count|maxval|minval|maxloc|minloc|product|sum|lbound|ubound|shape|size|merge|pack|unpack|reshape|spread|cshift|eoshift)(?=\())|(where|elsewhere|end\s*where)))\b</string>
			<key>name</key>
			<string>keyword.other.instrisic.array.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>other intrisics</string>
			<key>match</key>
			<string>\b(?i:(((dtime)(?=\())|(date_and_time|system_clock)))\b</string>
			<key>name</key>
			<string>keyword.other.instrisic.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>data specification</string>
			<key>match</key>
			<string>\b(?i:(integer|real|double\s+precision|complex|logical|character|block\sdata|operator|assignment))\b</string>
			<key>name</key>
			<string>storage.type.fortran</string>
		</dict>
		<dict>
			<key>comment</key>
			<string>data type attributes</string>
			<key>match</key>
			<string>\b(?i:(dimension|common|equivalence|parameter|external|intrinsic|save|data|implicit\s*none|implicit|intent|in|out|inout))\b</string>
			<key>name</key>
			<string>storage.modifier.fortran</string>
		</dict>
		<dict>
			<key>applyEndPatternLast</key>
			<integer>1</integer>
			<key>begin</key>
			<string>'</string>
			<key>beginCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.begin.fortran</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>String</string>
			<key>end</key>
			<string>'</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.fortran</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.single.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>''</string>
					<key>name</key>
					<string>constant.character.escape.apostrophe.fortran</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>applyEndPatternLast</key>
			<integer>1</integer>
			<key>begin</key>
			<string>"</string>
			<key>beginCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.begin.fortran</string>
				</dict>
			</dict>
			<key>comment</key>
			<string>String</string>
			<key>end</key>
			<string>"</string>
			<key>endCaptures</key>
			<dict>
				<key>0</key>
				<dict>
					<key>name</key>
					<string>punctuation.definition.string.end.fortran</string>
				</dict>
			</dict>
			<key>name</key>
			<string>string.quoted.double.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>""</string>
					<key>name</key>
					<string>constant.character.escape.quote.fortran</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>begin</key>
			<string>^\s*#\s*(error|warning)\b</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.error.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>$\n?</string>
			<key>name</key>
			<string>meta.preprocessor.diagnostic.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?&gt;\\\s*\n)</string>
					<key>name</key>
					<string>punctuation.separator.continuation.fortran</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>begin</key>
			<string>^\s*#\s*(include|import)\b\s+</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.include.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>(?=(?://|/\*))|$\n?</string>
			<key>name</key>
			<string>meta.preprocessor.fortran.include</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?&gt;\\\s*\n)</string>
					<key>name</key>
					<string>punctuation.separator.continuation.fortran</string>
				</dict>
				<dict>
					<key>begin</key>
					<string>"</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>"</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.fortran</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.double.include.fortran</string>
				</dict>
				<dict>
					<key>begin</key>
					<string>&lt;</string>
					<key>beginCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.begin.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>&gt;</string>
					<key>endCaptures</key>
					<dict>
						<key>0</key>
						<dict>
							<key>name</key>
							<string>punctuation.definition.string.end.fortran</string>
						</dict>
					</dict>
					<key>name</key>
					<string>string.quoted.other.lt-gt.include.fortran</string>
				</dict>
			</array>
		</dict>
		<dict>
			<key>include</key>
			<string>#pragma-mark</string>
		</dict>
		<dict>
			<key>begin</key>
			<string>^\s*#\s*(define|defined|elif|else|if|ifdef|ifndef|line|pragma|undef)\b</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>(?=(?://|/\*))|$\n?</string>
			<key>name</key>
			<string>meta.preprocessor.fortran</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>match</key>
					<string>(?&gt;\\\s*\n)</string>
					<key>name</key>
					<string>punctuation.separator.continuation.fortran</string>
				</dict>
			</array>
		</dict>
	</array>
	<key>repository</key>
	<dict>
		<key>disabled</key>
		<dict>
			<key>begin</key>
			<string>^\s*#\s*if(n?def)?\b.*$</string>
			<key>comment</key>
			<string>eat nested preprocessor if(def)s</string>
			<key>end</key>
			<string>^\s*#\s*endif\b.*$</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>#disabled</string>
				</dict>
				<dict>
					<key>include</key>
					<string>#pragma-mark</string>
				</dict>
			</array>
		</dict>
		<key>pragma-mark</key>
		<dict>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>meta.preprocessor.fortran</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.pragma.fortran</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>meta.toc-list.pragma-mark.fortran</string>
				</dict>
			</dict>
			<key>match</key>
			<string>^\s*(#\s*(pragma\s+mark)\s+(.*))</string>
			<key>name</key>
			<string>meta.section</string>
		</dict>
		<key>preprocessor-rule-disabled</key>
		<dict>
			<key>begin</key>
			<string>^\s*(#(if)\s+(0)\b).*</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>meta.preprocessor.fortran</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.if.fortran</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>constant.numeric.preprocessor.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>^\s*(#\s*(endif)\b)</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>^\s*(#\s*(else)\b)</string>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>meta.preprocessor.fortran</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>keyword.control.import.else.fortran</string>
						</dict>
					</dict>
					<key>end</key>
					<string>(?=^\s*#\s*endif\b.*$)</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>$base</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string></string>
					<key>end</key>
					<string>(?=^\s*#\s*(else|endif)\b.*$)</string>
					<key>name</key>
					<string>comment.block.preprocessor.if-branch</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#disabled</string>
						</dict>
						<dict>
							<key>include</key>
							<string>#pragma-mark</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<key>preprocessor-rule-enabled</key>
		<dict>
			<key>begin</key>
			<string>^\s*(#(if)\s+(0*1)\b)</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>meta.preprocessor.fortran</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.if.fortran</string>
				</dict>
				<key>3</key>
				<dict>
					<key>name</key>
					<string>constant.numeric.preprocessor.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>^\s*(#\s*(endif)\b)</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>begin</key>
					<string>^\s*(#\s*(else)\b).*</string>
					<key>captures</key>
					<dict>
						<key>1</key>
						<dict>
							<key>name</key>
							<string>meta.preprocessor.fortran</string>
						</dict>
						<key>2</key>
						<dict>
							<key>name</key>
							<string>keyword.control.import.else.fortran</string>
						</dict>
					</dict>
					<key>contentName</key>
					<string>comment.block.preprocessor.else-branch</string>
					<key>end</key>
					<string>(?=^\s*#\s*endif\b.*$)</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>#disabled</string>
						</dict>
						<dict>
							<key>include</key>
							<string>#pragma-mark</string>
						</dict>
					</array>
				</dict>
				<dict>
					<key>begin</key>
					<string></string>
					<key>end</key>
					<string>(?=^\s*#\s*(else|endif)\b.*$)</string>
					<key>patterns</key>
					<array>
						<dict>
							<key>include</key>
							<string>$base</string>
						</dict>
					</array>
				</dict>
			</array>
		</dict>
		<key>preprocessor-rule-other</key>
		<dict>
			<key>begin</key>
			<string>^\s*(#\s*(if(n?def)?)\b.*?(?:(?=(?://|/\*))|$))</string>
			<key>captures</key>
			<dict>
				<key>1</key>
				<dict>
					<key>name</key>
					<string>meta.preprocessor.fortran</string>
				</dict>
				<key>2</key>
				<dict>
					<key>name</key>
					<string>keyword.control.import.fortran</string>
				</dict>
			</dict>
			<key>end</key>
			<string>^\s*(#\s*(endif)\b).*$</string>
			<key>patterns</key>
			<array>
				<dict>
					<key>include</key>
					<string>$base</string>
				</dict>
			</array>
		</dict>
	</dict>
	<key>scopeName</key>
	<string>source.fortran</string>
	<key>uuid</key>
	<string>45253F88-F7CC-49C5-9C32-F3FADD2AB579</string>
</dict>
</plist>