tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,801 lines • 157 kB
JSON
{
"displayName": "Fortran (Free Form)",
"fileTypes": [
"f90",
"F90",
"f95",
"F95",
"f03",
"F03",
"f08",
"F08",
"f18",
"F18",
"fpp",
"FPP",
".pf",
".PF"
],
"firstLineMatch": "(?i)-\\*- mode: fortran free -\\*-",
"injections": {
"source.fortran.free - ( string | comment | meta.preprocessor )": {
"patterns": [
{
"include": "#line-continuation-operator"
},
{
"include": "#preprocessor"
}
]
},
"string.quoted.double.fortran": {
"patterns": [
{
"include": "#string-line-continuation-operator"
}
]
},
"string.quoted.single.fortran": {
"patterns": [
{
"include": "#string-line-continuation-operator"
}
]
}
},
"name": "fortran-free-form",
"patterns": [
{
"include": "#preprocessor"
},
{
"include": "#comments"
},
{
"include": "#constants"
},
{
"include": "#operators"
},
{
"include": "#array-constructor"
},
{
"include": "#parentheses"
},
{
"include": "#include-statement"
},
{
"include": "#import-statement"
},
{
"include": "#block-data-definition"
},
{
"include": "#function-definition"
},
{
"include": "#module-definition"
},
{
"include": "#program-definition"
},
{
"include": "#submodule-definition"
},
{
"include": "#subroutine-definition"
},
{
"include": "#procedure-definition"
},
{
"include": "#derived-type-definition"
},
{
"include": "#enum-block-construct"
},
{
"include": "#interface-block-constructs"
},
{
"include": "#procedure-specification-statement"
},
{
"include": "#type-specification-statements"
},
{
"include": "#specification-statements"
},
{
"include": "#control-constructs"
},
{
"include": "#control-statements"
},
{
"include": "#execution-statements"
},
{
"include": "#intrinsic-functions"
},
{
"include": "#variable"
}
],
"repository": {
"IO-item-list": {
"begin": "(?i)(?=\\s*[\"'0-9a-z])",
"contentName": "meta.name-list.fortran",
"end": "(?=[\\n!);])",
"patterns": [
{
"include": "#constants"
},
{
"include": "#operators"
},
{
"include": "#intrinsic-functions"
},
{
"include": "#array-constructor"
},
{
"include": "#parentheses"
},
{
"include": "#brackets"
},
{
"include": "#assignment-keyword"
},
{
"include": "#operator-keyword"
},
{
"include": "#variable"
}
]
},
"IO-keywords": {
"begin": "(?i)\\G\\s*\\b(?:(read)|(write))\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.generic-spec.read.fortran"
},
"2": {
"name": "keyword.control.generic-spec.write.fortran"
},
"3": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"patterns": [
{
"captures": {
"1": {
"name": "keyword.control.generic-spec.formatted.fortran"
},
"2": {
"name": "keyword.control.generic-spec.unformatted.fortran"
}
},
"match": "(?i)\\G\\s*\\b(?:(formatted)|(unformatted))\\b"
},
{
"include": "#invalid-word"
}
]
},
"IO-statements": {
"patterns": [
{
"begin": "(?i)\\b(format)(?=\\s*[!\\&(])",
"beginCaptures": {
"1": {
"name": "keyword.control.format.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.statement.IO.fortran",
"patterns": [
{
"include": "#comments"
},
{
"include": "#line-continuation-operator"
},
{
"include": "#format-parentheses"
}
]
},
{
"begin": "(?i)\\b(?:(backspace)|(close)|(endfile)|(inquire)|(open)|(read)|(rewind)|(write))\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.backspace.fortran"
},
"2": {
"name": "keyword.control.close.fortran"
},
"3": {
"name": "keyword.control.endfile.fortran"
},
"4": {
"name": "keyword.control.inquire.fortran"
},
"5": {
"name": "keyword.control.open.fortran"
},
"6": {
"name": "keyword.control.read.fortran"
},
"7": {
"name": "keyword.control.rewind.fortran"
},
"8": {
"name": "keyword.control.write.fortran"
},
"9": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"name": "meta.statement.IO.fortran",
"patterns": [
{
"include": "#parentheses-dummy-variables"
},
{
"include": "#IO-item-list"
}
]
},
{
"captures": {
"1": {
"name": "keyword.control.backspace.fortran"
},
"2": {
"name": "keyword.control.endfile.fortran"
},
"3": {
"name": "keyword.control.format.fortran"
},
"4": {
"name": "keyword.control.print.fortran"
},
"5": {
"name": "keyword.control.read.fortran"
},
"6": {
"name": "keyword.control.rewind.fortran"
}
},
"match": "(?i)\\b(?:(backspace)|(endfile)|(format)|(print)|(read)|(rewind))\\b"
},
{
"begin": "(?i)\\b(?:(flush)|(wait))\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.flush.fortran"
},
"2": {
"name": "keyword.control.wait.fortran"
},
"3": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(?<!\\G)",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
{
"captures": {
"1": {
"name": "keyword.control.flush.fortran"
}
},
"match": "(?i)\\b(flush)\\b"
}
]
},
"abstract-attribute": {
"captures": {
"1": {
"name": "storage.modifier.fortran.fortran"
}
},
"match": "(?i)\\G\\s*\\b(abstract)\\b"
},
"abstract-interface-block-construct": {
"begin": "(?i)\\b(abstract)\\s+(interface)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.attribute.fortran.modern"
},
"2": {
"name": "keyword.control.interface.fortran"
}
},
"end": "(?i)\\b(end\\s*interface)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.endinterface.fortran.modern"
}
},
"name": "meta.interface.abstract.fortran",
"patterns": [
{
"include": "$base"
}
]
},
"access-attribute": {
"patterns": [
{
"include": "#private-attribute"
},
{
"include": "#public-attribute"
}
]
},
"allocatable-attribute": {
"captures": {
"1": {
"name": "storage.modifier.allocatable.fortran"
}
},
"match": "(?i)\\s*\\b(allocatable)\\b"
},
"allocate-statement": {
"begin": "(?i)\\b(allocate)\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.allocate.fortran"
},
"2": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(?<!\\G)",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"name": "meta.statement.allocate.fortran",
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
"arithmetic-operators": {
"captures": {
"1": {
"name": "keyword.operator.subtraction.fortran"
},
"2": {
"name": "keyword.operator.addition.fortran"
},
"3": {
"name": "keyword.operator.division.fortran"
},
"4": {
"name": "keyword.operator.power.fortran"
},
"5": {
"name": "keyword.operator.multiplication.fortran"
}
},
"match": "(-)|(\\+)|/(?![/=\\\\])|(\\*\\*)|(\\*)"
},
"array-constructor": {
"begin": "(?<!\\n)(?=\\s*(\\[|\\(/))",
"end": "(?<!\\G)",
"name": "meta.contructor.array",
"patterns": [
{
"include": "#brackets"
},
{
"begin": "\\s*(\\(/)",
"beginCaptures": {
"1": {
"name": "punctuation.bracket.left.fortran"
}
},
"end": "(/\\))",
"endCaptures": {
"1": {
"name": "punctuation.bracket.left.fortran"
}
},
"patterns": [
{
"include": "#comments"
},
{
"include": "#constants"
},
{
"include": "#operators"
},
{
"include": "#array-constructor"
},
{
"include": "#parentheses"
},
{
"include": "#intrinsic-functions"
},
{
"include": "#variable"
}
]
}
]
},
"assign-statement": {
"patterns": [
{
"begin": "(?i)\\b(assign)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.assign.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.statement.control.assign.fortran",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.control.to.fortran"
}
},
"match": "(?i)\\s*\\b(to)\\b"
},
{
"include": "$base"
}
]
}
]
},
"assignment-keyword": {
"begin": "(?i)\\G\\s*\\b(assignment)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.generic-spec.assignment.fortran"
},
"2": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"patterns": [
{
"include": "#assignment-operator"
},
{
"include": "#invalid-word"
}
]
},
"assignment-operator": {
"match": "(?<![/<=>])(=)(?![=>])",
"name": "keyword.operator.assignment.fortran"
},
"associate-construct": {
"begin": "(?i)\\b(associate)\\b(?=\\s*\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.associate.fortran"
}
},
"contentName": "meta.block.associate.fortran",
"end": "(?i)\\b(end\\s*associate)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.endassociate.fortran"
}
},
"patterns": [
{
"include": "$base"
}
]
},
"asynchronous-attribute": {
"captures": {
"1": {
"name": "storage.modifier.asynchronous.fortran"
}
},
"match": "(?i)\\G\\s*\\b(asynchronous)\\b"
},
"attribute-specification-statement": {
"begin": "(?i)(?=\\b(?:allocatable|asynchronous|contiguous|external|intrinsic|optional|parameter|pointer|private|protected|public|save|target|value|volatile)\\b|(bind|dimension|intent)\\s*\\(|(codimension)\\s*\\[)",
"end": "(?=[\\n!;])",
"name": "meta.statement.attribute-specification.fortran",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#allocatable-attribute"
},
{
"include": "#asynchronous-attribute"
},
{
"include": "#codimension-attribute"
},
{
"include": "#contiguous-attribute"
},
{
"include": "#dimension-attribute"
},
{
"include": "#external-attribute"
},
{
"include": "#intent-attribute"
},
{
"include": "#intrinsic-attribute"
},
{
"include": "#language-binding-attribute"
},
{
"include": "#optional-attribute"
},
{
"include": "#parameter-attribute"
},
{
"include": "#pointer-attribute"
},
{
"include": "#protected-attribute"
},
{
"include": "#save-attribute"
},
{
"include": "#target-attribute"
},
{
"include": "#value-attribute"
},
{
"include": "#volatile-attribute"
},
{
"begin": "(?=\\s*::)",
"contentName": "meta.attribute-list.normal.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"include": "#invalid-word"
}
]
},
{
"include": "#name-list"
}
]
},
"block-construct": {
"begin": "(?i)\\b(block)\\b(?!\\s*\\bdata\\b)",
"beginCaptures": {
"1": {
"name": "keyword.control.associate.fortran"
}
},
"contentName": "meta.block.block.fortran",
"end": "(?i)\\b(end\\s*block)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.endassociate.fortran"
}
},
"patterns": [
{
"include": "$base"
}
]
},
"block-data-definition": {
"begin": "(?i)\\b(block\\s*data)\\b(?:\\s+([a-z]\\w*)\\b)?",
"beginCaptures": {
"1": {
"name": "keyword.control.block-data.fortran"
},
"2": {
"name": "entity.name.block-data.fortran"
}
},
"end": "(?i)\\b(?:(end\\s*block\\s*data)(?:\\s+(\\2))?|(end))\\b(?:\\s*(\\S((?!\\n).)*))?",
"endCaptures": {
"1": {
"name": "keyword.control.end-block-data.fortran"
},
"2": {
"name": "entity.name.block-data.fortran"
},
"3": {
"name": "keyword.control.end-block-data.fortran"
},
"4": {
"name": "invalid.error.block-data-definition.fortran"
}
},
"name": "meta.block-data.fortran",
"patterns": [
{
"include": "$base"
}
]
},
"brackets": {
"begin": "\\s*(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.bracket.left.fortran"
}
},
"end": "(])",
"endCaptures": {
"1": {
"name": "punctuation.bracket.left.fortran"
}
},
"patterns": [
{
"include": "#comments"
},
{
"include": "#constants"
},
{
"include": "#operators"
},
{
"include": "#array-constructor"
},
{
"include": "#parentheses"
},
{
"include": "#intrinsic-functions"
},
{
"include": "#variable"
}
]
},
"call-statement": {
"patterns": [
{
"applyEndPatternLast": 1,
"begin": "(?i)\\s*\\b(call)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.call.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.statement.control.call.fortran",
"patterns": [
{
"begin": "(?i)(?=\\s*[a-z]\\w*\\s*%)",
"end": "(?=[\\n!;])",
"patterns": [
{
"include": "#comments"
},
{
"include": "#line-continuation-operator"
},
{
"captures": {
"1": {
"name": "variable.other.fortran"
},
"2": {
"name": "keyword.accessor.fortran"
}
},
"match": "(?i)\\s*([a-z]\\w*)\\s*(%)"
},
{
"captures": {
"1": {
"name": "entity.name.function.subroutine.fortran"
}
},
"match": "(?i)\\s*([a-z]\\w*)"
},
{
"include": "#parentheses-dummy-variables"
}
]
},
{
"include": "#intrinsic-subroutines"
},
{
"begin": "(?i)\\G\\s*\\b([a-z]\\w*)\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.subroutine.fortran"
},
"2": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(?<!\\G)",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
{
"captures": {
"1": {
"name": "entity.name.function.subroutine.fortran"
}
},
"match": "(?i)\\G\\s*\\b([a-z]\\w*)\\b(?=\\s*[\\n!;])"
},
{
"include": "$base"
}
]
}
]
},
"character-type": {
"patterns": [
{
"begin": "(?i)\\b(character)\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "storage.type.character.fortran"
},
"2": {
"name": "punctuation.parentheses.left.fortran"
}
},
"contentName": "meta.type-spec.fortran",
"end": "(?<!\\G)",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
{
"captures": {
"1": {
"name": "storage.type.character.fortran"
},
"2": {
"name": "keyword.operator.multiplication.fortran"
},
"3": {
"name": "constant.numeric.fortran"
}
},
"match": "(?i)\\b(character)\\b(?:\\s*(\\*)\\s*(\\d*))?"
}
]
},
"codimension-attribute": {
"begin": "(?i)\\G\\s*\\b(codimension)(?=\\s*\\[)",
"beginCaptures": {
"1": {
"name": "storage.modifier.codimension.fortran"
}
},
"end": "(?<!\\G)",
"patterns": [
{
"include": "#brackets"
}
]
},
"comments": {
"begin": "!",
"end": "(?=\\n)",
"name": "comment.line.fortran"
},
"common-statement": {
"begin": "(?i)\\b(common)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.common.fortran"
}
},
"end": "(?=[\\n!;])",
"patterns": [
{
"include": "$base"
}
]
},
"concurrent-attribute": {
"begin": "(?i)\\G\\s*\\b(concurrent)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.while.fortran"
}
},
"end": "(?=[\\n!;])",
"patterns": [
{
"include": "#parentheses"
},
{
"include": "#invalid-word"
}
]
},
"constants": {
"patterns": [
{
"include": "#logical-constant"
},
{
"include": "#numeric-constant"
},
{
"include": "#string-constant"
}
]
},
"contiguous-attribute": {
"captures": {
"1": {
"name": "storage.modifier.contigous.fortran"
}
},
"match": "(?i)\\G\\s*\\b(contiguous)\\b"
},
"continue-statement": {
"patterns": [
{
"begin": "(?i)\\s*\\b(continue)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.continue.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.statement.control.continue.fortran",
"patterns": [
{
"include": "#invalid-character"
}
]
}
]
},
"control-constructs": {
"patterns": [
{
"include": "#named-control-constructs"
},
{
"include": "#unnamed-control-constructs"
}
]
},
"control-statements": {
"patterns": [
{
"include": "#assign-statement"
},
{
"include": "#call-statement"
},
{
"include": "#continue-statement"
},
{
"include": "#cycle-statement"
},
{
"include": "#entry-statement"
},
{
"include": "#error-stop-statement"
},
{
"include": "#exit-statement"
},
{
"include": "#goto-statement"
},
{
"include": "#pause-statement"
},
{
"include": "#return-statement"
},
{
"include": "#stop-statement"
},
{
"include": "#where-statement"
},
{
"include": "#image-control-statement"
}
]
},
"cpp-numeric-constant": {
"captures": {
"0": {
"patterns": [
{
"begin": "(?=.)",
"beginCaptures": {
},
"end": "$",
"endCaptures": {
},
"patterns": [
{
"captures": {
"1": {
"name": "keyword.other.unit.hexadecimal.cpp"
},
"10": {
"name": "constant.numeric.exponent.hexadecimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"11": {
"name": "keyword.other.unit.suffix.floating-point.cpp"
},
"12": {
"name": "keyword.other.unit.user-defined.cpp"
},
"2": {
"name": "constant.numeric.hexadecimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"3": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"4": {
"name": "constant.numeric.hexadecimal.cpp"
},
"5": {
"name": "constant.numeric.hexadecimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"6": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"7": {
"name": "keyword.other.unit.exponent.hexadecimal.cpp"
},
"8": {
"name": "keyword.operator.plus.exponent.hexadecimal.cpp"
},
"9": {
"name": "keyword.operator.minus.exponent.hexadecimal.cpp"
}
},
"match": "\\G(0[Xx])(\\h(?:\\h|((?<=\\h)'(?=\\h)))*)?((?<=\\h)\\.|\\.(?=\\h))(\\h(?:\\h|((?<=\\h)'(?=\\h)))*)?(?:(?<!')([Pp])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)'(?=\\h))*))?([FLfl](?!\\w))?((?:\\w(?<![Pp\\h])\\w*)?)$"
},
{
"captures": {
"1": {
"name": "constant.numeric.decimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"10": {
"name": "keyword.other.unit.suffix.floating-point.cpp"
},
"11": {
"name": "keyword.other.unit.user-defined.cpp"
},
"2": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"3": {
"name": "constant.numeric.decimal.point.cpp"
},
"4": {
"name": "constant.numeric.decimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"5": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"6": {
"name": "keyword.other.unit.exponent.decimal.cpp"
},
"7": {
"name": "keyword.operator.plus.exponent.decimal.cpp"
},
"8": {
"name": "keyword.operator.minus.exponent.decimal.cpp"
},
"9": {
"name": "constant.numeric.exponent.decimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
}
},
"match": "\\G(?=[.0-9])(?!0[BXbx])([0-9](?:[0-9]|((?<=\\h)'(?=\\h)))*)?((?<=[0-9])\\.|\\.(?=[0-9]))([0-9](?:[0-9]|((?<=\\h)'(?=\\h)))*)?(?:(?<!')([Ee])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)'(?=\\h))*))?([FLfl](?!\\w))?((?:\\w(?<![0-9Ee])\\w*)?)$"
},
{
"captures": {
"1": {
"name": "keyword.other.unit.binary.cpp"
},
"2": {
"name": "constant.numeric.binary.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"3": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"4": {
"name": "keyword.other.unit.suffix.integer.cpp"
},
"5": {
"name": "keyword.other.unit.user-defined.cpp"
}
},
"match": "\\G(0[Bb])([01](?:[01]|((?<=\\h)'(?=\\h)))*)((?:[Uu]|[Uu]ll?|[Uu]LL?|ll?[Uu]?|LL?[Uu]?|[Ff])(?!\\w))?((?:\\w(?<![0-9])\\w*)?)$"
},
{
"captures": {
"1": {
"name": "keyword.other.unit.octal.cpp"
},
"2": {
"name": "constant.numeric.octal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"3": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"4": {
"name": "keyword.other.unit.suffix.integer.cpp"
},
"5": {
"name": "keyword.other.unit.user-defined.cpp"
}
},
"match": "\\G(0)((?:[0-7]|((?<=\\h)'(?=\\h)))+)((?:[Uu]|[Uu]ll?|[Uu]LL?|ll?[Uu]?|LL?[Uu]?|[Ff])(?!\\w))?((?:\\w(?<![0-9])\\w*)?)$"
},
{
"captures": {
"1": {
"name": "keyword.other.unit.hexadecimal.cpp"
},
"2": {
"name": "constant.numeric.hexadecimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"3": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"4": {
"name": "keyword.other.unit.exponent.hexadecimal.cpp"
},
"5": {
"name": "keyword.operator.plus.exponent.hexadecimal.cpp"
},
"6": {
"name": "keyword.operator.minus.exponent.hexadecimal.cpp"
},
"7": {
"name": "constant.numeric.exponent.hexadecimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"8": {
"name": "keyword.other.unit.suffix.integer.cpp"
},
"9": {
"name": "keyword.other.unit.user-defined.cpp"
}
},
"match": "\\G(0[Xx])(\\h(?:\\h|((?<=\\h)'(?=\\h)))*)(?:(?<!')([Pp])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)'(?=\\h))*))?((?:[Uu]|[Uu]ll?|[Uu]LL?|ll?[Uu]?|LL?[Uu]?|[Ff])(?!\\w))?((?:\\w(?<![Pp\\h])\\w*)?)$"
},
{
"captures": {
"1": {
"name": "constant.numeric.decimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"2": {
"name": "punctuation.separator.constant.numeric.cpp"
},
"3": {
"name": "keyword.other.unit.exponent.decimal.cpp"
},
"4": {
"name": "keyword.operator.plus.exponent.decimal.cpp"
},
"5": {
"name": "keyword.operator.minus.exponent.decimal.cpp"
},
"6": {
"name": "constant.numeric.exponent.decimal.cpp",
"patterns": [
{
"match": "(?<=\\h)'(?=\\h)",
"name": "punctuation.separator.constant.numeric.cpp"
}
]
},
"7": {
"name": "keyword.other.unit.suffix.integer.cpp"
},
"8": {
"name": "keyword.other.unit.user-defined.cpp"
}
},
"match": "\\G(?=[.0-9])(?!0[BXbx])([0-9](?:[0-9]|((?<=\\h)'(?=\\h)))*)(?:(?<!')([Ee])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)'(?=\\h))*))?((?:[Uu]|[Uu]ll?|[Uu]LL?|ll?[Uu]?|LL?[Uu]?|[Ff])(?!\\w))?((?:\\w(?<![0-9Ee])\\w*)?)$"
},
{
"match": "(?:['.0-9A-Z_a-z]|(?<=[EPep])[-+])+",
"name": "invalid.illegal.constant.numeric.cpp"
}
]
}
]
}
},
"match": "(?<!\\w)\\.?\\d(?:['.0-9A-Z_a-z]|(?<=[EPep])[-+])*"
},
"critical-construct": {
"begin": "(?i)\\b(critical)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.associate.fortran"
}
},
"contentName": "meta.block.critical.fortran",
"end": "(?i)\\b(end\\s*critical)\\b",
"endCaptures": {
"1": {
"name": "keyword.control.endassociate.fortran"
}
},
"patterns": [
{
"include": "$base"
}
]
},
"cycle-statement": {
"patterns": [
{
"begin": "(?i)\\s*\\b(cycle)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.cycle.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.statement.control.fortran",
"patterns": [
]
}
]
},
"data-statement": {
"begin": "(?i)\\b(data)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.data.fortran"
}
},
"end": "(?=[\\n!;])",
"patterns": [
{
"include": "$base"
}
]
},
"deallocate-statement": {
"begin": "(?i)\\b(deallocate)\\s*(?=\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.deallocate.fortran"
},
"2": {
"name": "punctuation.parentheses.left.fortran"
}
},
"end": "(?<!\\G)",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"name": "meta.statement.deallocate.fortran",
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
"deferred-attribute": {
"captures": {
"1": {
"name": "storage.modifier.deferred.fortran"
}
},
"match": "(?i)\\s*\\b(deferred)\\b"
},
"derived-type": {
"begin": "(?i)\\b(?:(class)|(type))\\s*(\\()\\s*(([a-z]\\w*)|\\*)",
"beginCaptures": {
"1": {
"name": "storage.type.class.fortran"
},
"2": {
"name": "storage.type.type.fortran"
},
"3": {
"name": "punctuation.parentheses.left.fortran"
},
"4": {
"name": "entity.name.type.fortran"
}
},
"contentName": "meta.type-spec.fortran",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.parentheses.right.fortran"
}
},
"name": "meta.specification.type.derived.fortran",
"patterns": [
{
"include": "#parentheses-dummy-variables"
}
]
},
"derived-type-component-attribute-specification": {
"begin": "(?i)(?=\\s*\\b(?:private|sequence)\\b)",
"end": "(?=[\\n!;])",
"name": "meta.statement.attribute-specification.fortran",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#sequence-attribute"
},
{
"include": "#invalid-character"
}
]
},
"derived-type-component-parameter-specification": {
"captures": {
"1": {
"name": "storage.type.integer.fortran"
},
"2": {
"name": "punctuation.comma.fortran"
},
"3": {
"name": "keyword.other.attribute.derived-type.parameter.fortran"
},
"4": {
"name": "keyword.operator.double-colon.fortran"
},
"5": {
"name": "entity.name.derived-type.parameter.fortran"
}
},
"match": "(?i)\\b(integer)\\s*(,)\\s*(kind|len)\\s*(?:(::)\\s*([a-z]\\w*)?)?\\s*(?=[\\n!;])"
},
"derived-type-component-procedure-specification": {
"begin": "(?i)(?=\\bprocedure\\b)",
"end": "(?=[\\n!;])",
"name": "meta.specification.procedure.fortran",
"patterns": [
{
"include": "#procedure-type"
},
{
"begin": "(?=\\s*(,|::|\\())",
"contentName": "meta.attribute-list.derived-type-component-procedure.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"begin": "(,)",
"beginCaptures": {
"1": {
"name": "punctuation.comma.fortran"
}
},
"end": "(?=::|[\\n!,;])",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#pass-attribute"
},
{
"include": "#nopass-attribute"
},
{
"include": "#invalid-word"
},
{
"include": "#pointer-attribute"
}
]
}
]
},
{
"include": "#procedure-name-list"
}
]
},
"derived-type-component-type-specification": {
"begin": "(?i)(?=\\b(?:character|class|complex|double\\s*precision|double\\s*complex|integer|logical|real|type)\\b(?![^\\n!\"':;]*\\bfunction\\b))",
"end": "(?=[\\n!;])",
"name": "meta.specification.derived-type.fortran",
"patterns": [
{
"include": "#types"
},
{
"include": "#line-continuation-operator"
},
{
"begin": "(?=\\s*(,|::))",
"contentName": "meta.attribute-list.derived-type-component-type.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"begin": "(,)",
"beginCaptures": {
"1": {
"name": "punctuation.comma.fortran"
}
},
"end": "(?=::|[\\n!,;])",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#allocatable-attribute"
},
{
"include": "#codimension-attribute"
},
{
"include": "#contiguous-attribute"
},
{
"include": "#dimension-attribute"
},
{
"include": "#pointer-attribute"
},
{
"include": "#invalid-word"
}
]
}
]
},
{
"include": "#name-list"
}
]
},
"derived-type-contains-attribute-specification": {
"begin": "(?i)(?=\\bprivate\\b)",
"end": "(?=[\\n!;])",
"name": "meta.statement.attribute-specification.fortran",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#invalid-character"
}
]
},
"derived-type-contains-final-procedure-specification": {
"begin": "(?i)\\b(final)\\b",
"beginCaptures": {
"1": {
"name": "storage.type.final-procedure.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.specification.procedure.final.fortran",
"patterns": [
{
"begin": "(?=\\s*(::))",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"name": "meta.attribute-list.derived-type-contains-final-procedure.fortran",
"patterns": [
{
"include": "#invalid-word"
}
]
},
{
"include": "#procedure-name"
}
]
},
"derived-type-contains-generic-procedure-specification": {
"begin": "(?i)\\b(generic)\\b",
"beginCaptures": {
"1": {
"name": "storage.type.procedure.generic.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.specification.procedure.generic.fortran",
"patterns": [
{
"begin": "(?=\\s*(,|::|\\())",
"contentName": "meta.attribute-list.derived-type-contains-generic-procedure.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"begin": "(,)|^|(?<=&)",
"beginCaptures": {
"1": {
"name": "punctuation.comma.fortran"
}
},
"end": "(?=::|[\\n!\\&,;])",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#invalid-word"
}
]
}
]
},
{
"begin": "(?=\\s*[a-z])",
"contentName": "meta.name-list.fortran",
"end": "(?=[\\n!;])",
"patterns": [
{
"include": "#IO-keywords"
},
{
"include": "#assignment-keyword"
},
{
"include": "#operator-keyword"
},
{
"include": "#procedure-name"
},
{
"include": "#pointer-operators"
}
]
}
]
},
"derived-type-contains-procedure-specification": {
"begin": "(?i)(?=\\bprocedure\\b)",
"end": "(?=[\\n!;])",
"name": "meta.specification.procedure.fortran",
"patterns": [
{
"include": "#procedure-type"
},
{
"begin": "(?=\\s*(,|::|\\())",
"contentName": "meta.attribute-list.derived-type-contains-procedure.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"begin": "(,)|^|(?<=&)",
"beginCaptures": {
"1": {
"name": "punctuation.comma.fortran"
}
},
"end": "(?=::|[\\n!\\&,;])",
"name": "meta.something.fortran",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#deferred-attribute"
},
{
"include": "#non-overridable-attribute"
},
{
"include": "#nopass-attribute"
},
{
"include": "#pass-attribute"
},
{
"include": "#invalid-word"
}
]
}
]
},
{
"include": "#procedure-name-list"
}
]
},
"derived-type-definition": {
"begin": "(?i)\\b(type)\\b(?!\\s*(\\(|is\\b|=))",
"beginCaptures": {
"1": {
"name": "keyword.control.type.fortran"
}
},
"end": "(?=[\\n!;])",
"name": "meta.derived-type.definition.fortran",
"patterns": [
{
"begin": "\\G(?=\\s*(,|::))",
"contentName": "meta.attribute-list.derived-type.fortran",
"end": "(::)|(?=[\\n!;])",
"endCaptures": {
"1": {
"name": "keyword.operator.double-colon.fortran"
}
},
"patterns": [
{
"begin": "(,)",
"beginCaptures": {
"1": {
"name": "punctuation.comma.fortran"
}
},
"end": "(?=::|[\\n!,;])",
"patterns": [
{
"include": "#access-attribute"
},
{
"include": "#abstract-attribute"
},
{
"include": "#language-binding-attribute"
},
{
"include": "#extends-attribute"
},
{
"include": "#invalid-word"
}
]
}
]
},
{
"begin": "(?i)\\s*\\b([a-z]\\w*)\\b",
"beginCaptures": {
"1": {
"name": "entity.name.type.fortran"
}
},
"end": "(?i)(?:^|(?<=;))\\s*(end\\s*type)(?:\\s+(?:(\\1)|(\\w+)))?\\b",
"endCaptures": {
"1": {
"name": "keyword.control.endtype.fortran"
},
"2": {
"name": "entity.name.type.fortran"
},
"3": {
"name": "invalid.error.derived-type.fortran"
}
},
"patterns": [
{
"include": "#dummy-variable-list"
},
{
"include": "#comments"
},
{
"begin": "(?i)^(?!\\s*\\b(?:contains|end\\s*type)\\b)",
"end": "(?i)^(?=\\s*\\b(?:contains|end\\s*type)\\b)",
"name": "meta.block.specification.derived-type.fortran",
"patterns": [
{
"include": "#comments"
},
{
"include": "#derived-type-component-attribute-specification"
},
{
"include": "#derived-type-component-parameter-specification"
},
{
"include": "#derived-type-component-procedure-specification"
},
{
"include": "#derived-type-component-type-specification"
}
]
},
{
"begin": "(?i)\\b(contains)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.contains.fortran"
}
},
"end": "(?i)(?=\\s*end\\s*type\\b)",
"name": "meta.block.contains.fortran",
"patterns": [
{
"include": "#comments"
},
{
"include": "#derived-type-contains-attribute-specification"
},
{
"include": "#derived-type-contains-final-procedure-specification"
},
{
"include": "#derived-type-contains-generic-procedure-specification"
},
{
"