|
2056 | 2056 | } |
2057 | 2057 | }, |
2058 | 2058 | "end": "(?=[;!\\n])", |
| 2059 | + "applyEndPatternLast": 1, |
2059 | 2060 | "patterns": [ |
2060 | 2061 | { |
2061 | 2062 | "comment": "type-bound subroutines", |
2062 | | - "begin": "(?ix)\\G\\s*([a-z]\\w*)(%)([a-z]\\w*)\\b\\s*(?=\\()", |
2063 | | - "beginCaptures": { |
2064 | | - "1": { |
2065 | | - "name": "variable.other.fortran" |
| 2063 | + "begin": "(?ix)(?=\\s*[a-z]\\w*\\s*%)", |
| 2064 | + "end": "(?=[;!\\n])", |
| 2065 | + "patterns": [ |
| 2066 | + { |
| 2067 | + "include": "#comments" |
2066 | 2068 | }, |
2067 | | - "2": { |
2068 | | - "name": "keyword.accessor.fortran" |
| 2069 | + { |
| 2070 | + "include": "#line-continuation-operator" |
| 2071 | + }, |
| 2072 | + { |
| 2073 | + "comment": "Variable and accessor", |
| 2074 | + "match": "(?ix)\\s*([a-z]\\w*)\\s*(%)", |
| 2075 | + "captures": { |
| 2076 | + "1": { |
| 2077 | + "name": "variable.other.fortran" |
| 2078 | + }, |
| 2079 | + "2": { |
| 2080 | + "name": "keyword.accessor.fortran" |
| 2081 | + } |
| 2082 | + } |
| 2083 | + }, |
| 2084 | + { |
| 2085 | + "comment": "Final function", |
| 2086 | + "match": "(?ix)\\s*([a-z]\\w*)", |
| 2087 | + "captures": { |
| 2088 | + "1": { |
| 2089 | + "name": "entity.name.function.subroutine.fortran" |
| 2090 | + } |
| 2091 | + } |
2069 | 2092 | }, |
2070 | | - "3": { |
2071 | | - "name": "entity.name.function.subroutine.fortran" |
2072 | | - } |
2073 | | - }, |
2074 | | - "end": "(?<!\\G)", |
2075 | | - "endCaptures": { |
2076 | | - "1": { |
2077 | | - "name": "punctuation.parentheses.right.fortran" |
2078 | | - } |
2079 | | - }, |
2080 | | - "patterns": [ |
2081 | 2093 | { |
2082 | 2094 | "include": "#parentheses-dummy-variables" |
2083 | 2095 | } |
|
3056 | 3068 | }, |
3057 | 3069 | "IO-statements": { |
3058 | 3070 | "patterns": [ |
| 3071 | + { |
| 3072 | + "comment": "Format statement Introduced in the Fortran 1977 standard.", |
| 3073 | + "name": "meta.statement.IO.fortran", |
| 3074 | + "begin": "(?ix)\\b(format)(?=\\s*(?:\\(|&|!))", |
| 3075 | + "beginCaptures": { |
| 3076 | + "1": { |
| 3077 | + "name": "keyword.control.format.fortran" |
| 3078 | + } |
| 3079 | + }, |
| 3080 | + "end": "(?=[;!\\n])", |
| 3081 | + "patterns": [ |
| 3082 | + { |
| 3083 | + "include": "#comments" |
| 3084 | + }, |
| 3085 | + { |
| 3086 | + "include": "#line-continuation-operator" |
| 3087 | + }, |
| 3088 | + { |
| 3089 | + "include": "#format-parentheses" |
| 3090 | + } |
| 3091 | + ] |
| 3092 | + }, |
3059 | 3093 | { |
3060 | 3094 | "comment": "Introduced in the Fortran 1977 standard.", |
3061 | 3095 | "name": "meta.statement.IO.fortran", |
3062 | | - "begin": "(?ix)\\b(?:(backspace)|(close)|(endfile)|(format)|(inquire)|(open)|(read)|(rewind)|(write))\\s*(?=\\()", |
| 3096 | + "begin": "(?ix)\\b(?:(backspace)|(close)|(endfile)|(inquire)|(open)|(read)|(rewind)|(write))\\s*(?=\\()", |
3063 | 3097 | "beginCaptures": { |
3064 | 3098 | "1": { |
3065 | 3099 | "name": "keyword.control.backspace.fortran" |
|
3071 | 3105 | "name": "keyword.control.endfile.fortran" |
3072 | 3106 | }, |
3073 | 3107 | "4": { |
3074 | | - "name": "keyword.control.format.fortran" |
3075 | | - }, |
3076 | | - "5": { |
3077 | 3108 | "name": "keyword.control.inquire.fortran" |
3078 | 3109 | }, |
3079 | | - "6": { |
| 3110 | + "5": { |
3080 | 3111 | "name": "keyword.control.open.fortran" |
3081 | 3112 | }, |
3082 | | - "7": { |
| 3113 | + "6": { |
3083 | 3114 | "name": "keyword.control.read.fortran" |
3084 | 3115 | }, |
3085 | | - "8": { |
| 3116 | + "7": { |
3086 | 3117 | "name": "keyword.control.rewind.fortran" |
3087 | 3118 | }, |
3088 | | - "9": { |
| 3119 | + "8": { |
3089 | 3120 | "name": "keyword.control.write.fortran" |
3090 | 3121 | }, |
3091 | | - "10": { |
| 3122 | + "9": { |
3092 | 3123 | "name": "punctuation.parentheses.left.fortran" |
3093 | 3124 | } |
3094 | 3125 | }, |
|
5365 | 5396 | } |
5366 | 5397 | ] |
5367 | 5398 | }, |
| 5399 | + "format-descriptor": { |
| 5400 | + "comment": "FORMAT descriptor content for FORMAT statements (avoids array constructor scoping)", |
| 5401 | + "contentName": "meta.format-descriptor.fortran", |
| 5402 | + "begin": "\\(\\/", |
| 5403 | + "beginCaptures": { |
| 5404 | + "0": { "name": "punctuation.bracket.left.fortran" } |
| 5405 | + }, |
| 5406 | + "end": "\\)", |
| 5407 | + "endCaptures": { |
| 5408 | + "0": { "name": "punctuation.bracket.right.fortran" } |
| 5409 | + }, |
| 5410 | + "patterns": [ |
| 5411 | + { "include": "#comments" }, |
| 5412 | + { "include": "#constants" }, |
| 5413 | + { "include": "#operators" }, |
| 5414 | + { "include": "#parentheses" }, |
| 5415 | + { "include": "#intrinsic-functions" }, |
| 5416 | + { "include": "#variable" } |
| 5417 | + ] |
| 5418 | + }, |
5368 | 5419 | "array-constructor": { |
5369 | 5420 | "name": "meta.contructor.array", |
5370 | | - "begin": "(?=\\s*(\\[|\\(\\/))", |
| 5421 | + "begin": "(?<!\\n)(?=\\s*(\\[|\\(\\/))", |
5371 | 5422 | "end": "(?<!\\G)", |
5372 | 5423 | "patterns": [ |
5373 | 5424 | { |
|
5661 | 5712 | } |
5662 | 5713 | ] |
5663 | 5714 | }, |
5664 | | - "parentheses": { |
| 5715 | + "format-descriptors": { |
| 5716 | + "patterns": [ |
| 5717 | + { |
| 5718 | + "comment": "Format descriptors.", |
| 5719 | + "match": "(?i)(?:\\b|(?<=\\d)|(?<=P))(EN|ES|EX|DT|DC|DP|RC|RD|RN|RP|RU|RZ|BN|BZ|SP|SS|TL|TR|I|F|E|D|G|L|A|B|O|Z|T|X|Q|S|P)(?=$|[^A-Za-z_]|[EFDG](?i))", |
| 5720 | + "captures": { |
| 5721 | + "1": { "name": "keyword.other.format-descriptor.fortran" } |
| 5722 | + } |
| 5723 | + }, |
| 5724 | + { |
| 5725 | + "match": "\\/", |
| 5726 | + "name": "keyword.operator.format.newline.fortran" |
| 5727 | + }, |
| 5728 | + { |
| 5729 | + "match": ":", |
| 5730 | + "name": "keyword.operator.format.separator.fortran" |
| 5731 | + }, |
| 5732 | + { |
| 5733 | + "comment": "Non-standard newline suppression", |
| 5734 | + "match": "\\$|\\\\", |
| 5735 | + "name": "keyword.other.format-descriptor.nonstandard.fortran" |
| 5736 | + }, |
| 5737 | + { |
| 5738 | + "comment": "Legacy Hollerith constant (e.g. 4HText)", |
| 5739 | + "match": "(?i)(?:\\b|(?<=\\d))\\d+H", |
| 5740 | + "name": "keyword.other.format-descriptor.legacy.fortran" |
| 5741 | + } |
| 5742 | + ] |
| 5743 | + }, |
| 5744 | + "parentheses-common": { |
| 5745 | + "patterns": [ |
| 5746 | + { |
| 5747 | + "include": "#comments" |
| 5748 | + }, |
| 5749 | + { |
| 5750 | + "include": "#constants" |
| 5751 | + }, |
| 5752 | + { |
| 5753 | + "include": "#operators" |
| 5754 | + }, |
| 5755 | + { |
| 5756 | + "include": "#intrinsic-functions" |
| 5757 | + }, |
| 5758 | + { |
| 5759 | + "include": "#variable" |
| 5760 | + } |
| 5761 | + ] |
| 5762 | + }, |
| 5763 | + "format-parentheses": { |
5665 | 5764 | "begin": "\\s*(\\()", |
5666 | 5765 | "beginCaptures": { |
5667 | 5766 | "1": { |
|
5679 | 5778 | "include": "#comments" |
5680 | 5779 | }, |
5681 | 5780 | { |
5682 | | - "include": "#constants" |
5683 | | - }, |
5684 | | - { |
5685 | | - "include": "#operators" |
| 5781 | + "include": "#line-continuation-operator" |
5686 | 5782 | }, |
5687 | 5783 | { |
5688 | | - "include": "#array-constructor" |
| 5784 | + "match": "(?:\\b|\\+|-)\\d+(?=[A-Za-z])", |
| 5785 | + "name": "constant.numeric.fortran" |
5689 | 5786 | }, |
5690 | 5787 | { |
5691 | | - "include": "#parentheses" |
| 5788 | + "include": "#format-descriptors" |
5692 | 5789 | }, |
5693 | 5790 | { |
5694 | | - "include": "#intrinsic-functions" |
| 5791 | + "include": "#format-parentheses" |
5695 | 5792 | }, |
5696 | 5793 | { |
5697 | | - "include": "#variable" |
| 5794 | + "include": "#parentheses-common" |
5698 | 5795 | } |
5699 | 5796 | ] |
5700 | 5797 | }, |
5701 | | - "parentheses-dummy-variables": { |
| 5798 | + "parentheses": { |
5702 | 5799 | "begin": "\\s*(\\()", |
5703 | 5800 | "beginCaptures": { |
5704 | 5801 | "1": { |
|
5713 | 5810 | }, |
5714 | 5811 | "patterns": [ |
5715 | 5812 | { |
5716 | | - "include": "#procedure-call-dummy-variable" |
| 5813 | + "include": "#array-constructor" |
5717 | 5814 | }, |
5718 | 5815 | { |
5719 | | - "include": "#comments" |
| 5816 | + "include": "#parentheses" |
5720 | 5817 | }, |
5721 | 5818 | { |
5722 | | - "include": "#constants" |
5723 | | - }, |
| 5819 | + "include": "#parentheses-common" |
| 5820 | + } |
| 5821 | + ] |
| 5822 | + }, |
| 5823 | + "parentheses-dummy-variables": { |
| 5824 | + "begin": "\\s*(\\()", |
| 5825 | + "beginCaptures": { |
| 5826 | + "1": { |
| 5827 | + "name": "punctuation.parentheses.left.fortran" |
| 5828 | + } |
| 5829 | + }, |
| 5830 | + "end": "(\\))", |
| 5831 | + "endCaptures": { |
| 5832 | + "1": { |
| 5833 | + "name": "punctuation.parentheses.right.fortran" |
| 5834 | + } |
| 5835 | + }, |
| 5836 | + "patterns": [ |
5724 | 5837 | { |
5725 | | - "include": "#operators" |
| 5838 | + "include": "#procedure-call-dummy-variable" |
5726 | 5839 | }, |
5727 | 5840 | { |
5728 | 5841 | "include": "#array-constructor" |
|
5731 | 5844 | "include": "#parentheses" |
5732 | 5845 | }, |
5733 | 5846 | { |
5734 | | - "include": "#intrinsic-functions" |
5735 | | - }, |
5736 | | - { |
5737 | | - "include": "#variable" |
| 5847 | + "include": "#parentheses-common" |
5738 | 5848 | } |
5739 | 5849 | ] |
5740 | 5850 | }, |
|
0 commit comments