{"name":"Fortran - Modern","scopeName":"source.fortran.modern","patterns":[{"include":"source.fortran"},{"name":"meta.function.interface.operator.fortran.modern","begin":"(?x:\t\t\t\t\t# extended mode\n\t\t\t\t\t^\n\t\t\t\t\t\\s*\t\t\t\t\t# start of line and possibly some space\n\t\t\t\t\t(?i:(interface))\t\t# 1: word interface\n\t\t\t\t\t\\s+\t\t\t\t\t# some space\n\t\t\t\t\t(?i:(operator|assignment))\t\t# 2: the words operator or assignment\n\t\t\t\t\t\\(\t\t\t\t\t# opening parenthesis\n\t\t\t\t\t((\\.[a-zA-Z0-9_]+\\.)|[\\+\\-\\=\\/\\*]+)\t# 3: an operator\n\t\t\t\t\t\n\t\t\t\t\t\\)\t\t\t\t\t# closing parenthesis\n\t\t\t\t\t)","end":"(?xi)\n\t\t\t\t(end)(?=\\s|\\z)\t\t\t\t\t\t# 1: the word end\n\t\t\t\t(?:\n\t\t\t\t\t\\s+\n\t\t\t\t\t(interface)\t\t\t\t\t\t# 2: possibly interface\n\t\t\t\t)?\n\t\t\t","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"storage.type.function.fortran"},"2":{"name":"storage.type.fortran"},"3":{"name":"keyword.operator.fortran"}},"endCaptures":{"1":{"name":"keyword.other.fortran"},"2":{"name":"storage.type.function.fortran"}}},{"name":"meta.function.interface.fortran.modern","begin":"(?x:\t\t\t\t\t# extended mode\n\t\t\t\t\t^\n\t\t\t\t\t\\s*\t\t\t\t\t# start of line and possibly some space\n\t\t\t\t\t(?i:(interface))\t\t# 1: word interface\n\t\t\t\t\t\\s+\t\t\t\t\t# some space\n\t\t\t\t\t([A-Za-z_][A-Za-z0-9_]*)\t# 1: name\n\t\t\t\t\t)","end":"(?xi)\n\t\t\t\t(end)(?=\\s|\\z)\t\t\t\t\t\t# 1: the word end\n\t\t\t\t(?:\n\t\t\t\t\t\\s+\n\t\t\t\t\t(interface)\t\t\t\t\t\t# 2: possibly interface\n\t\t\t\t)?\n\t\t\t","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"storage.type.function.fortran"},"2":{"name":"entity.name.function.fortran"}},"endCaptures":{"1":{"name":"keyword.other.fortran"},"2":{"name":"storage.type.function.fortran"}}},{"name":"meta.type-definition.fortran.modern","begin":"(?x:\t\t\t\t\t\t\t\t# extended mode\n\t\t\t\t\t^\\s*\t\t\t\t\t\t\t\t# begining of line and some space\n\t\t\t\t\t(?i:(type))\t\t\t\t\t\t\t# 1: word type\n\t\t\t\t\t\\s+\t\t\t\t\t\t\t\t\t# some space\n\t\t\t\t\t([a-zA-Z_][a-zA-Z0-9_]*)\t\t\t# 2: type name\n\t\t\t\t\t)","end":"(?xi)\n\t\t\t\t(end)(?=\\s|\\z)\t\t\t\t\t\t# 1: the word end\n\t\t\t\t(?:\n\t\t\t\t\t\\s+\n\t\t\t\t\t(type)\t\t\t\t\t\t\t# 2: possibly the word type\n\t\t\t\t\t(\\s+[A-Za-z_][A-Za-z0-9_]*)?\t# 3: possibly the name\n\t\t\t\t)?\n\t\t\t","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"storage.type.fortran.modern"},"2":{"name":"entity.name.type.fortran.modern"}},"endCaptures":{"1":{"name":"keyword.other.fortran"},"2":{"name":"storage.type.fortran.modern"},"3":{"name":"entity.name.type.end.fortran.modern"}}},{"begin":"(^[ \\t]+)?(?=!-)","end":"(?!\\G)","patterns":[{"name":"comment.line.exclamation.mark.fortran.modern","begin":"!-","end":"\\n","patterns":[{"match":"\\\\\\s*\\n"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.fortran"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.fortran"}}},{"begin":"(^[ \\t]+)?(?=!)","end":"(?!\\G)","patterns":[{"name":"comment.line.exclamation.fortran.modern","begin":"!","end":"\\n","patterns":[{"match":"\\\\\\s*\\n"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.fortran"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.fortran"}}},{"name":"keyword.control.fortran.modern","match":"\\b(?i:(select\\s+case|case(\\s+default)?|end\\s+select|use|(end\\s+)?forall))\\b"},{"name":"keyword.control.io.fortran.modern","match":"\\b(?i:(access|action|advance|append|apostrophe|asis|blank|delete|delim|direct|end|eor|err|exist|file|fmt|form|formatted|iolength|iostat|keep|name|named|nextrec|new|nml|no|null|number|old|opened|pad|position|quote|read|readwrite|rec|recl|replace|scratch|sequential|size|status|undefined|unformatted|unit|unknown|write|yes|zero|namelist)(?=\\())"},{"name":"keyword.operator.logical.fortran.modern","match":"\\b(\\=\\=|\\/\\=|\\\u003e\\=|\\\u003e|\\\u003c|\\\u003c\\=)\\b"},{"name":"keyword.operator.fortran.modern","match":"(\\%|\\=\\\u003e)"},{"name":"keyword.other.instrinsic.numeric.fortran.modern","match":"\\b(?i:(ceiling|floor|modulo)(?=\\())"},{"name":"keyword.other.instrinsic.array.fortran.modern","match":"\\b(?i:(allocate|allocated|deallocate)(?=\\())"},{"name":"keyword.other.instrinsic.pointer.fortran.modern","match":"\\b(?i:(associated)(?=\\())"},{"name":"keyword.other.programming-units.fortran.modern","match":"\\b(?i:((end\\s*)?(interface|procedure|module)))\\b"},{"name":"meta.specification.fortran.modern","begin":"\\b(?i:(type(?=\\s*\\()))\\b(?=.*::)","end":"(?=!)|$","patterns":[{"include":"$base"}],"beginCaptures":{"1":{"name":"storage.type.fortran.modern"}}},{"name":"storage.type.fortran.modern","match":"\\b(?i:(type(?=\\s*\\()))\\b"},{"name":"storage.modifier.fortran.modern","match":"\\b(?i:(optional|recursive|pointer|allocatable|target|private|public))\\b"}]}
