changeset 115:e1663ac707b0

An alternate multiline comment syntax using "(* ... *)". Can be nested.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 06 May 2026 01:31:41 +0200
parents be50fe0687d6
children 9bfd87544902
files pygments_lexer_pseudocode2/algpseudocode.py pygments_lexer_pseudocode2/bases.py tests/test_algpseudo.py
diffstat 3 files changed, 42 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Wed May 06 01:10:11 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Wed May 06 01:31:41 2026 +0200
@@ -225,6 +225,7 @@
         "root": [
             (r"\n", Whitespace),
             (r"/\*", Comment.Multiline, "multiline-nested-comment"),
+            (r"\(\*", Comment.Multiline, "multiline-nested-comment-alt"),
             (r"(//|#).*$", Comment.Single),
             include("remark"),
             (r"(?i)\\(block|state(?:ment)?)[ \t]*(\{)",
--- a/pygments_lexer_pseudocode2/bases.py	Wed May 06 01:10:11 2026 +0200
+++ b/pygments_lexer_pseudocode2/bases.py	Wed May 06 01:31:41 2026 +0200
@@ -178,5 +178,11 @@
             (r'/\*', Comment.Multiline, '#push'),
             (r'\*/', Comment.Multiline, '#pop'),
             (r'[*/]', Comment.Multiline),
+        ],
+    'multiline-nested-comment-alt': [
+            (r'[^*()]+', Comment.Multiline),
+            (r'\(\*', Comment.Multiline, '#push'),
+            (r'\*\)', Comment.Multiline, '#pop'),
+            (r'[*()]', Comment.Multiline),
         ]
     }
--- a/tests/test_algpseudo.py	Wed May 06 01:10:11 2026 +0200
+++ b/tests/test_algpseudo.py	Wed May 06 01:31:41 2026 +0200
@@ -929,6 +929,41 @@
             pygments.lex(r"\TEXT{\EXPR{\CALL{a procedure}(arg1, arg2, arg3)}}",
                          self.lexer))
 
+    def test_comment_multi(self):
+        self.assertTokenStreamEqualComplete(
+            [("Comment.Multiline", "/*"),
+             ("Comment.Multiline", " word1 "),
+             ("Comment.Multiline", "*"),
+             ("Comment.Multiline", " word2 "),
+             ("Comment.Multiline", "/"),
+             ("Comment.Multiline", " word3 "),
+             ("Comment.Multiline", "/"),
+             ("Comment.Multiline", "/"),
+             ("Comment.Multiline", " word4 "),
+             ("Comment.Multiline", "*/"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"/* word1 * word2 / word3 // word4 */", self.lexer))
+
+    def test_comment_multi_alt(self):
+        self.assertTokenStreamEqualComplete(
+            [("Comment.Multiline", "(*"),
+             ("Comment.Multiline", " word1 "),
+             ("Comment.Multiline", "*"),
+             ("Comment.Multiline", " word2 "),
+             ("Comment.Multiline", "("),
+             ("Comment.Multiline", " word3 "),
+             ("Comment.Multiline", ")"),
+             ("Comment.Multiline", " word4 "),
+             ("Comment.Multiline", "("),
+             ("Comment.Multiline", ")"),
+             ("Comment.Multiline", " word5 "),
+             ("Comment.Multiline", "*)"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"(* word1 * word2 ( word3 ) word4 () word5 *)",
+                         self.lexer))
+
 
 class PygmentizeCompletely(unittest.TestCase):