From a049b539113d20be25df41b65aa0c8981d835511 Mon Sep 17 00:00:00 2001 From: ecasglez <29178639+ecasglez@users.noreply.github.com> Date: Sat, 2 Oct 2021 13:16:49 +0200 Subject: [PATCH] Fix "do concurrent" and "go to" keywords in the Fortran lexer. (#1877) * Fix "do concurrent" and "go to" keywords in the Fortran lexer. * "Go to" statement was only highlighted if there was no space between "go" and "to". * "Concurrent" keyword in the "Do Concurrent" statement was never highlighted because of a typo. It has been fixed. In addition, it now highlights them only if "Concurrent" is right after the "Do" keyword. * I had to put the "do concurrent" changes before the already available list of keywords. Otherwise it won't highlight "Concurrent" because it finds first the "Do" keyword in the other list and stops searching for more keywords. * Fix a bug while parsing Fortran files with go to and do concurrent statements causing wrong highlighting. * For example, in the variable name "gotoErr", "goto" was highlighted but it shouldn't. * Update Fortran tests to the changes for the "go to statements" * Use Text.Whitespace to distinguish Fortran multiword keywords Co-authored-by: ecasglez --- pygments/lexers/fortran.py | 8 +- tests/examplefiles/fortran/zmlrpc.f90.output | 168 +++++++++++++----- .../examplefiles/fortranfixed/ahcon.f.output | 6 +- 3 files changed, 135 insertions(+), 47 deletions(-) diff --git a/pygments/lexers/fortran.py b/pygments/lexers/fortran.py index 6c6b8f8c..049a57cd 100644 --- a/pygments/lexers/fortran.py +++ b/pygments/lexers/fortran.py @@ -48,11 +48,15 @@ class FortranLexer(RegexLexer): ], 'core': [ # Statements + + (r'\b(DO)(\s+)(CONCURRENT)\b', bygroups(Keyword, Text.Whitespace, Keyword)), + (r'\b(GO)(\s*)(TO)\b', bygroups(Keyword, Text.Whitespace, Keyword)), + (words(( 'ABSTRACT', 'ACCEPT', 'ALL', 'ALLSTOP', 'ALLOCATABLE', 'ALLOCATE', 'ARRAY', 'ASSIGN', 'ASSOCIATE', 'ASYNCHRONOUS', 'BACKSPACE', 'BIND', 'BLOCK', 'BLOCKDATA', 'BYTE', 'CALL', 'CASE', 'CLASS', 'CLOSE', - 'CODIMENSION', 'COMMON', 'CONCURRRENT', 'CONTIGUOUS', 'CONTAINS', + 'CODIMENSION', 'COMMON', 'CONTIGUOUS', 'CONTAINS', 'CONTINUE', 'CRITICAL', 'CYCLE', 'DATA', 'DEALLOCATE', 'DECODE', 'DEFERRED', 'DIMENSION', 'DO', 'ELEMENTAL', 'ELSE', 'ENCODE', 'END', 'ENDASSOCIATE', 'ENDBLOCK', 'ENDDO', 'ENDENUM', 'ENDFORALL', @@ -60,7 +64,7 @@ class FortranLexer(RegexLexer): 'ENDSELECT', 'ENDSUBMODULE', 'ENDSUBROUTINE', 'ENDTYPE', 'ENDWHERE', 'ENTRY', 'ENUM', 'ENUMERATOR', 'EQUIVALENCE', 'ERROR STOP', 'EXIT', 'EXTENDS', 'EXTERNAL', 'EXTRINSIC', 'FILE', 'FINAL', 'FORALL', 'FORMAT', - 'FUNCTION', 'GENERIC', 'GOTO', 'IF', 'IMAGES', 'IMPLICIT', + 'FUNCTION', 'GENERIC', 'IF', 'IMAGES', 'IMPLICIT', 'IMPORT', 'IMPURE', 'INCLUDE', 'INQUIRE', 'INTENT', 'INTERFACE', 'INTRINSIC', 'IS', 'LOCK', 'MEMORY', 'MODULE', 'NAMELIST', 'NULLIFY', 'NONE', 'NON_INTRINSIC', 'NON_OVERRIDABLE', 'NOPASS', 'ONLY', 'OPEN', diff --git a/tests/examplefiles/fortran/zmlrpc.f90.output b/tests/examplefiles/fortran/zmlrpc.f90.output index ff27ddb2..64daf0c0 100644 --- a/tests/examplefiles/fortran/zmlrpc.f90.output +++ b/tests/examplefiles/fortran/zmlrpc.f90.output @@ -908,7 +908,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -947,7 +949,9 @@ "'no_ml_ in mlprc_aply?'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n ' Text 'case' Keyword @@ -1034,7 +1038,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'allocate' Keyword @@ -1251,7 +1257,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -1442,7 +1450,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'else\n ' Keyword @@ -1522,7 +1532,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else' Keyword @@ -1889,7 +1901,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else\n\n ' Keyword @@ -1991,7 +2005,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n ' Text 'case' Keyword @@ -2409,7 +2425,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -2537,7 +2555,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'else\n ' Keyword @@ -2618,7 +2638,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else' Keyword @@ -2827,7 +2849,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'enddo\n\n\n ' Keyword @@ -2886,7 +2910,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n ' Text 'do ' Keyword @@ -3028,7 +3054,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else\n ' Keyword @@ -3179,7 +3207,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'call ' Keyword @@ -3237,7 +3267,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'enddo\n\n ' Keyword @@ -3276,7 +3308,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n ' Text 'case' Keyword @@ -3429,7 +3463,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -3523,7 +3559,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'mlprec_wrk' Name @@ -3598,7 +3636,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'do ' Keyword @@ -3759,7 +3799,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -3887,7 +3929,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'else\n ' Keyword @@ -3967,7 +4011,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else' Keyword @@ -4197,7 +4243,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'if' Keyword @@ -4282,7 +4330,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'endif\n\n ' Keyword @@ -4426,7 +4476,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else\n\n ' Keyword @@ -4549,7 +4601,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n\n ' Text 'case' Keyword @@ -4772,7 +4826,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -4898,7 +4954,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'mlprec_wrk' Name @@ -4973,7 +5031,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'do ' Keyword @@ -5188,7 +5248,9 @@ "'Allocate'" Literal.String.Single ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'end ' Keyword @@ -5274,7 +5336,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'else\n ' Keyword @@ -5354,7 +5418,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else' Keyword @@ -5574,7 +5640,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'call ' Keyword @@ -5631,7 +5699,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'if' Keyword @@ -5716,7 +5786,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n ' Text 'endif\n\n ' Keyword @@ -5858,7 +5930,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'else\n ' Keyword @@ -5995,7 +6069,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'call ' Keyword @@ -6053,7 +6129,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'enddo\n\n ' Keyword @@ -6096,7 +6174,9 @@ '0' Literal.Number.Integer ')' Punctuation ' ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n\n ' Text 'case ' Keyword @@ -6142,7 +6222,9 @@ ')' Punctuation ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'end ' Keyword @@ -6190,7 +6272,9 @@ ')' Punctuation ')' Punctuation '\n ' Text -'goto ' Keyword +'go' Keyword +'to' Keyword +' ' Text '9999' Literal.Number.Integer '\n\n ' Text 'end ' Keyword diff --git a/tests/examplefiles/fortranfixed/ahcon.f.output b/tests/examplefiles/fortranfixed/ahcon.f.output index bb1e3839..26a015a8 100644 --- a/tests/examplefiles/fortranfixed/ahcon.f.output +++ b/tests/examplefiles/fortranfixed/ahcon.f.output @@ -681,9 +681,9 @@ '1.D0' Literal.Number.Float ')' Punctuation ' ' Text -'GO' Name -' ' Text -'TO' Name +'GO' Keyword +' ' Text.Whitespace +'TO' Keyword ' ' Text '100' Literal.Number.Integer '\n' Text -- 2.33.0