python-pygments/0001-Fix-do-concurrent-and-go-to-keywords-in-the-Fortran-.patch
cao-fei8 cb76d10eb3 Fix "do concurrent" and "go to" keywords in the Fortran
Reference:
a049b53911

Signed-off-by: cao-fei8 <caofei@xfusion.com>
2023-01-16 22:17:57 +08:00

544 lines
15 KiB
Diff

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 <ecasglez@protonmail.com>
---
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