From a5381e5fef763b8de4ba1361f8a8bbf493f68074 Mon Sep 17 00:00:00 2001 From: wilsong-anl Date: Mon, 29 Sep 2025 15:29:31 -0500 Subject: [PATCH 1/5] Update fortran_free-form.tmLanguage.json for labeled "if" and "where" statements Some correct syntax of labeled "if" and "where" statements messed up the syntax highlighting. This commit fixes those issues. --- syntaxes/fortran_free-form.tmLanguage.json | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 619eb14c..c0df09d9 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -1642,11 +1642,11 @@ { "comment": "rest of else line", "begin": "(?!(\\s*(;|!|\\n)))", - "end": "(?=[;!\\n])", + "end": "\\s*(?=[;!\\n])", "patterns": [ { "comment": "capture the label if present", - "match": "\\s*([a-z]\\w*)?\\s*\\b(\\w*)\\b", + "match": "(?i)\\s*([a-z]\\w*)?\\s*\\b(\\w*)\\b", "captures": { "1": { "name": "meta.label.else.fortran" @@ -1882,11 +1882,20 @@ "name": "keyword.control.elsewhere.fortran" } }, - "end": "(?=[;!\\n])", + "end": "\\s*(?=[;!\\n])", "patterns": [ { "include": "#parentheses" }, + { + "comment": "capture the label if present", + "match": "(?i)(\\s*[a-z]\\w*)?", + "captures": { + "1": { + "name": "meta.label.elsewhere.fortran" + } + } + }, { "include": "#invalid-word" } From 1541ee1a900cdeb14d0e80e6aecc1cb6e4086bf7 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 22 Dec 2025 11:02:25 +0000 Subject: [PATCH 2/5] test: improve test for labelled if-statements --- test/fortran/syntax/conditionals.f90 | 8 ++++---- test/fortran/syntax/conditionals.f90.snap | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/test/fortran/syntax/conditionals.f90 b/test/fortran/syntax/conditionals.f90 index 13723cd3..097c29aa 100644 --- a/test/fortran/syntax/conditionals.f90 +++ b/test/fortran/syntax/conditionals.f90 @@ -23,10 +23,10 @@ end if label2 ! labelled if-else-if-else -label3: if (1 > 2) then -else if (2 < 1) then label3 -else label3 -end if label3 +label3: if (1 > 2) then ! comment1 +else if (2 < 1) then label3 ! comment2 +else label3 ! comment3 +end if label3 ! comment4 ! labelled if with whitespace after end label label4: if (1 > 2) then diff --git a/test/fortran/syntax/conditionals.f90.snap b/test/fortran/syntax/conditionals.f90.snap index d057ffc9..767d2874 100644 --- a/test/fortran/syntax/conditionals.f90.snap +++ b/test/fortran/syntax/conditionals.f90.snap @@ -119,7 +119,7 @@ >! labelled if-else-if-else #^ source.fortran.free comment.line.fortran # ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran ->label3: if (1 > 2) then +>label3: if (1 > 2) then ! comment1 #^^^^^^^ source.fortran.free # ^ source.fortran.free meta.named-construct.fortran.modern # ^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.if.fortran @@ -133,7 +133,10 @@ # ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran # ^ source.fortran.free meta.named-construct.fortran.modern # ^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.then.fortran ->else if (2 < 1) then label3 +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +# ^^^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +>else if (2 < 1) then label3 ! comment2 #^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.elseif.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran punctuation.parentheses.left.fortran @@ -146,14 +149,23 @@ # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran # ^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.then.fortran # ^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.elseif.fortran ->else label3 +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +# ^^^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +>else label3 ! comment3 #^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.else.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran # ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else.fortran ->end if label3 +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +# ^^^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran comment.line.fortran +>end if label3 ! comment4 #^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran # ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^ source.fortran.free comment.line.fortran +# ^^^^^^^^^ source.fortran.free comment.line.fortran > >! labelled if with whitespace after end label #^ source.fortran.free comment.line.fortran From 2a99e455581211faad339f0d78008c9ace684051 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 22 Dec 2025 11:05:18 +0000 Subject: [PATCH 3/5] test: add comprehensive WHERE statement syntax test --- test/fortran/syntax/where.f90 | 95 +++++ test/fortran/syntax/where.f90.snap | 630 +++++++++++++++++++++++++++++ 2 files changed, 725 insertions(+) create mode 100644 test/fortran/syntax/where.f90 create mode 100644 test/fortran/syntax/where.f90.snap diff --git a/test/fortran/syntax/where.f90 b/test/fortran/syntax/where.f90 new file mode 100644 index 00000000..0ea94965 --- /dev/null +++ b/test/fortran/syntax/where.f90 @@ -0,0 +1,95 @@ +program where_test + implicit none + real :: a(10), b(10) + + ! where statement + where (a > 0) a = a + 1 + + ! where construct + where (a > 0) + a = a + 1 + end where + + ! where with elsewhere + where (a > 0) + a = a + 1 + elsewhere + a = 0 + end where + + ! where with elsewhere mask + where (a > 0) + a = a + 1 + elsewhere (a < -1) + a = a - 1 + elsewhere + a = 0 + end where + + ! labelled where + label1: where (a > 0) + a = a + 1 + end where label1 + + ! labelled where with elsewhere + label2: where (a > 0) + a = a + 1 + elsewhere label2 + a = 0 + end where label2 + + ! labelled where with elsewhere mask + label3: where (a > 0) + a = a + 1 + elsewhere (a < -1) label3 + a = a - 1 + elsewhere label3 + a = 0 + end where label3 + + ! nested where + where (a > 0) + where (b > 0) + a = a + 1 + end where + end where + + ! where with continuation + where (a > & + 0) + a = a + 1 + end where + + ! multiple elsewhere + where (a > 0) + a = a + 1 + elsewhere (a == 0) + a = 0 + else where (a < 0) + a = a - 1 + elsewhere + a = 0 + end where + + ! where with comments + where (a > 0) ! comment + a = a + 1 + elsewhere ! comment + a = 0 + end where + + ! labelled where with whitespace + label4: where (a > 0) + a = a + 1 + end where label4 + + ! nested labels + where (a > 0) + label5: where (b > 0) + a = a + 1 + end where label5 + elsewhere + a = 0 + end where + +end program where_test diff --git a/test/fortran/syntax/where.f90.snap b/test/fortran/syntax/where.f90.snap new file mode 100644 index 00000000..1de8cef8 --- /dev/null +++ b/test/fortran/syntax/where.f90.snap @@ -0,0 +1,630 @@ +>program where_test +#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran +> implicit none +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> real :: a(10), b(10) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +> +> ! where statement +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) a = a + 1 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.where.fortran constant.numeric.fortran +> +> ! where construct +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! where with elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! where with elsewhere mask +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere (a < -1) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.right.fortran +> a = a - 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! labelled where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> label1: where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> end where label1 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.endwhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.label.end.name.fortran +> +> ! labelled where with elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> label2: where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> elsewhere label2 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.elsewhere.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.label.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> end where label2 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.endwhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.label.end.name.fortran +> +> ! labelled where with elsewhere mask +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> label3: where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> elsewhere (a < -1) label3 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.elsewhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran punctuation.parentheses.right.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.label.elsewhere.fortran +> a = a - 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> elsewhere label3 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.elsewhere.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.label.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> end where label3 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.endwhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.label.end.name.fortran +> +> ! nested where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> where (b > 0) +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! where with continuation +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > & +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.operator.line-continuation.fortran +> 0) +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! multiple elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere (a == 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.right.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> else where (a < 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran punctuation.parentheses.right.fortran +> a = a - 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! where with comments +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) ! comment +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran comment.line.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran comment.line.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> elsewhere ! comment +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran comment.line.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran comment.line.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +> ! labelled where with whitespace +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> label4: where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> end where label4 +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.endwhere.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.label.end.name.fortran +> +> ! nested labels +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +> where (a > 0) +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> label5: where (b > 0) +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern keyword.control.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +> a = a + 1 +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran constant.numeric.fortran +> end where label5 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern meta.block.where.fortran keyword.control.endwhere.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.label.end.name.fortran +> elsewhere +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.elsewhere.fortran +> a = 0 +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran constant.numeric.fortran +> end where +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.where.fortran keyword.control.endwhere.fortran +> +>end program where_test +#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran +> \ No newline at end of file From d88acbb118509cc441f02957cd74698eed3ce3c7 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 22 Dec 2025 11:05:36 +0000 Subject: [PATCH 4/5] chore: delete duplicate preprocessor test --- test/fortran/syntax/preprocessor.f90 | 11 ----- test/fortran/syntax/preprocessor.f90.snap | 57 ----------------------- 2 files changed, 68 deletions(-) delete mode 100644 test/fortran/syntax/preprocessor.f90 delete mode 100644 test/fortran/syntax/preprocessor.f90.snap diff --git a/test/fortran/syntax/preprocessor.f90 b/test/fortran/syntax/preprocessor.f90 deleted file mode 100644 index 17272980..00000000 --- a/test/fortran/syntax/preprocessor.f90 +++ /dev/null @@ -1,11 +0,0 @@ -! Preprocessor directives -#define MAX 100 -program test -#ifdef DEBUG - print *, "debug" -#else - print *, "release" -#endif -#include "header.h" - x = MAX -end program diff --git a/test/fortran/syntax/preprocessor.f90.snap b/test/fortran/syntax/preprocessor.f90.snap deleted file mode 100644 index 9d7eede2..00000000 --- a/test/fortran/syntax/preprocessor.f90.snap +++ /dev/null @@ -1,57 +0,0 @@ ->! Preprocessor directives -#^ source.fortran.free comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran ->#define MAX 100 -#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran -# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp ->program test -#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran -# ^ source.fortran.free meta.program.fortran -# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran ->#ifdef DEBUG -#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor -> print *, "debug" -#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran ->#else -#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.else.fortran -> print *, "release" -#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran ->#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran ->#include "header.h" -#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran keyword.control.preprocessor.include.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran -> x = MAX -#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran ->end program -#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran -> \ No newline at end of file From 9758eaf319467951cdd392ead334d7bdcb1f142b Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 22 Dec 2025 11:08:00 +0000 Subject: [PATCH 5/5] chore: update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 769ae935..1acb605a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +- Fixed syntax highlighting bug for labelled `if` and `where` constructs + ([#1241](https://github.com/fortran-lang/vscode-fortran-support/pull/1241)) - Fixed bug where formatting arguments would not be updated from settings.json ([[#1007](https://github.com/fortran-lang/vscode-fortran-support/issues/1007)]) - Fixed bug where specifying `-ffree-line-length-X` and `-ffixed-line-length-X`