changeset 112:ec8767cc5493

More translations (FR and DE)
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 05 May 2026 17:38:49 +0200
parents d6f3a1d1bedd
children 9aea2fd5f037
files pygments_lexer_pseudocode2/algpseudocode.py tests/test_algpseudo.py
diffstat 2 files changed, 78 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Tue May 05 17:37:58 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Tue May 05 17:38:49 2026 +0200
@@ -503,6 +503,13 @@
 
 class AlgPseudocodeLexer_DE(AlgPseudocodeLexer):
 
+    """
+
+    .. seealso::
+       - https://de.wikipedia.org/wiki/Pseudocode
+
+    """
+
     name = "AlgPseudocodeDE"
     aliases = ["algpseudocode-de", "algpseudo-de"]
     filenames = ["*.algpseudo-de", "*.algpseudocode-de"]
@@ -522,11 +529,31 @@
         "CLASS": "KLASSE",
         "IS": "IST",
         "WITH": "MIT",
+        "IF": "WENN",
+        "THEN": "DANN",
+        "ELSE": "ANDERNFALLS",
+        "ELSEIF": "ANDERNFALLS WENN",
+        "ELSIF": "ANDERNFALLS WENN",
+        "ELIF": "ANDERNFALLS WENN",
+#       "DO": # XXX TBD  # in WHILE WHILE ... DO  # noqa  # in WHILE ... DO
+        "WHILE": "SOLANGE",
+        "FOR": "FÜR",
+        "FORALL": "FÜR ALLE",
+        "FROM": "VON",
+        "TO": "BIS",
+        "IN": "IN",
+        "STEP": "SCHRITTWEITE",
+#       "LOOP": XXX TBD        # noqa
+        "REPEAT": "WIEDERHOLE",
+        "UNTIL": "BIS",
+#       "RETURN": XXX TBD      # noqa        
+        "BEGIN": "START",
+        "END": "ENDE",
     })
     END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy()
     END_TRANSLATIONS.update({
         "PROG": "ENDE DES PROGRAMMS",
-        "PROGRAM": "ENDE VON PROGRAMMS",
+        "PROGRAM": "ENDE DES PROGRAMMS",
         "ALGO": "ENDE DES ALGORITHMUS",
         "ALGORITHM": "ENDE DES ALGORITHMUS",
         "PROC": "ENDE DER PROZEDUR",
@@ -535,12 +562,26 @@
         "FUNCTION": "ENDE DER FUNKTION",
         "FN": "ENDE DER FUNKTION",
         "CLASS": "ENDE DER KLASSE",
+        "IF": "ENDE WENN",
+        "WHILE": "ENDE SOLANGE",
+        "FOR": "ENDE FÜR",
+        "FORALL": "ENDE FÜR ALLE",
+#       "LOOP": "ENDE XXX",            # XXX TBD   # noqa
     })
     DEFAULT_END_PREFIX = "ENDE VON "
 
 
 class AlgPseudocodeLexer_FR(AlgPseudocodeLexer):
 
+    """
+
+    .. seealso::
+      - https://info.blaisepascal.fr/pseudo-code/
+      - https://fr.wikipedia.org/wiki/Pseudo-code
+      - https://fr.wikipedia.org/wiki/Structure_de_contr%C3%B4le
+
+    """
+
     name = "AlgPseudocodeFR"
     aliases = ["algpseudocode-fr", "algpseudo-fr"]
     filenames = ["*.algpseudo-fr", "*.algpseudocode-fr"]
@@ -560,6 +601,26 @@
         "CLASS": "CLASSE",
         "IS": "EST",
         "WITH": "AVEC",
+        "IF": "SI",
+        "THEN": "ALORS",
+        "ELSE": "SINON",
+        "ELSEIF": "SINONSI",
+        "ELSIF": "SINONSI",
+        "ELIF": "SINONSI",
+        "DO": "FAIRE",             # as in in WHILE ... DO (not DO ... UNTIL)
+        "WHILE": "TANTQUE",
+        "FOR": "POUR",
+        "FORALL": "POUR CHAQUE",
+        "FROM": "DE",
+        "TO": "JUSQU'À",           # or just "À",
+        "IN": "DANS",              # as in FOR ... IN
+        "STEP": "PAR PAS DE",
+        "LOOP": "BOUCLE",          # XXX FIXME???
+        "REPEAT": "RÉPÉTER",
+        "UNTIL": "JUSQUACEQUE",
+        "RETURN": "RENVOYER",
+        "BEGIN": "DÉBUT",
+        "END": "FIN",
     })
     END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy()
     END_TRANSLATIONS.update({
@@ -573,5 +634,10 @@
         "FUNCTION": "FIN DE FOUNCTION",
         "FN": "FIN DE FONCTION",
         "CLASS": "FIN DE CLASSE",
+        "SI": "FIN SI",
+        "FOR": "FIN POUR",
+        "FORALL": "FIN POUR CHAQUE",
+        "WHILE": "FIN TANTQUE",
+        "LOOP": "FIN BOUCLE",
     })
     DEFAULT_END_PREFIX = "FIN DE "
--- a/tests/test_algpseudo.py	Tue May 05 17:37:58 2026 +0200
+++ b/tests/test_algpseudo.py	Tue May 05 17:38:49 2026 +0200
@@ -227,6 +227,17 @@
              ],
             pygments.lex(r"\PROC  { also {nichtxs\} hier}", lexer))
 
+    def test_loop_de_not_yet_translated(self):
+        lexer = pygments.lexers.load_lexer_from_file(
+            ALGLEXERFILENAME, "AlgPseudocodeLexer_DE")
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "LOOP"),
+             ("Text", " "),
+             ("Name.Entity", "a"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"\LOOP a", lexer))
+
     def test_function_1(self):
         self.assertTokenStreamEqualComplete(
             [("Keyword", "FUNCTION"),