UNPKG

tm-grammars

Version:
1,801 lines 157 kB
{ "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" }, { "