Skip to main content

mkdocs-pseudocode-i18n

Resource Link Purpose
mkdocs-pseudocode-i18n — repository gitlab.com/rod2ik/mkdocs-pseudocode-i18n Render multilingual pseudocode directly in MkDocs pages
mkdocs-pseudocode-i18n — documentation rod2ik.gitlab.io/mkdocs-pseudocode-i18n Complete user and developer documentation
pseudocode-i18n gitlab.com/rod2ik/pseudocode-i18n Shared grammar, language detection, formatter, Python transpiler and flowcharts
pygments-lexer-pseudocode-i18n gitlab.com/rod2ik/pygments-lexer-pseudocode-i18n Python-like Pygments highlighting driven by the same language definitions
vscode-pseudocode gitlab.com/rod2ik/vscode-pseudocode VS Code / Open VSX editing experience for .pseudo files

Current version: 0.3.0.
Requires: pseudocode-i18n >= 0.3, < 0.4 and pygments-lexer-pseudocode-i18n >= 0.3, < 0.4.
License: GNU GPL-3.0-or-later.

mkdocs-pseudocode-i18n lets you put multilingual educational pseudocode directly in MkDocs without maintaining separate highlighters for French, Spanish, Italian, Portuguese, German and English.

Use the same generic Markdown fence everywhere:

```pseudo
Si note >= 10 Alors:
    Afficher "Admis"
Sinon:
    Afficher "À revoir"
Fin
```

The plugin detects that this block is French, uses the shared Pygments lexer, preserves MathJax fragments, and keeps the original source available to the Material copy button.

Why use it?

The plugin follows the same grammar as pseudocode-i18n, so your documentation accepts the same classroom-friendly forms as .pseudo files:

  • automatic language detection;
  • optional # language: fr / # language: es override;
  • Si ... Alors, Sinon Si, Sinon, optional FinSi and generic Fin;
  • Répéter N fois and Répéter ... Jusqu'à;
  • Afficher / Écrire, Saisir / Lire, Mostrar / Escribir, and localized equivalents;
  • optional typed declarations with integer, float/real, string, boolean, array/list, dictionary, set and tuple;
  • localized null values such as Vide, Vacío, Vuoto, Vazio, Leer and None;
  • =, :=, arrows and normal arithmetic/comparison operators;
  • membership operators including Dans, localized not in synonyms, ∈ and ∉;
  • TeX fragments rendered through MathJax.

The language grammar is not duplicated in this project. It comes from pseudocode-i18n, and highlighting comes from pygments-lexer-pseudocode-i18n.

Install

python -m pip install mkdocs-pseudocode-i18n

Enable the plugin in mkdocs.yml:

plugins:
  - search
  - pseudocode

For Material for MkDocs, the usual highlighting extensions work well:

markdown_extensions:
  - pymdownx.highlight
  - pymdownx.superfences
  - pymdownx.arithmatex

One fence for every language

The preferred fence is simply:

```pseudo
...
```

or equivalently:

```pseudocode
...
```

Français

```pseudo
age est un entier
absent = Vide

Si age >= 18 Alors:
    Écrire "Majeur"
Sinon:
    Afficher "Mineur"
Fin
```

Español

```pseudo
edad es un entero
ausente = Vacío

Si edad >= 18 Entonces:
    Escribir "Adulto"
Sino:
    Mostrar "Menor"
Fin
```

Italiano

```pseudo
eta è un intero
assente = Vuoto

Se eta >= 18 Allora:
    Mostra "Maggiorenne"
Altrimenti:
    Mostra "Minorenne"
Fine
```

Português

```pseudo
idade é um inteiro
ausente = Vazio

Se idade >= 18 Então:
    Mostrar "Adulto"
Senão:
    Mostrar "Menor"
Fim
```

Deutsch

```pseudo
alter ist eine Ganzzahl
fehlend = Leer

Wenn alter >= 18 Dann:
    Ausgeben "Volljährig"
Sonst:
    Ausgeben "Minderjährig"
Ende
```

English

```pseudo
age is an integer
missing = None

If age >= 18 Then:
    Display "Adult"
Else:
    Display "Minor"
End
```

The documentation deliberately presents languages in the project order French → Spanish → Italian → Portuguese → German → English.

Force a language only when needed

Normally, let the plugin detect the language. If a short or ambiguous block needs help, add the universal directive inside the block:

```pseudo
# language: es
x = 2
Mostrar x
```

You can also force a language with an explicit fence alias:

pseudo-fr / pseudocode-fr
pseudo-es / pseudocode-es
pseudo-it / pseudocode-it
pseudo-pt / pseudocode-pt
pseudo-de / pseudocode-de
pseudo-en / pseudocode-en

These aliases are explicit overrides, not filename extensions. Pseudocode 0.3 uses one source extension, .pseudo, in the rest of the ecosystem.

Shared project configuration

mkdocs-pseudocode-i18n uses the same pseudocode.config.yml as the core and lexer:

language: auto
fallback_language: fr

mkdocs:
  inject_mathjax: true

Resolution for a generic pseudo fence is:

  1. explicit fence alias (pseudo-es, for example);
  2. # language: xx inside the pseudocode block;
  3. configured language when it is not auto;
  4. automatic detection from the block content;
  5. fallback_language.

You can still force a whole MkDocs site:

plugins:
  - pseudocode:
      language: es

A directive inside a generic block still has priority over that configured default, matching the core 0.3 semantics.

Custom synonyms

Language vocabulary remains data-driven. For example:

languages:
  fr:
    keywords:
      display:
        add:
          - Montrer

Then this becomes highlightable without changing plugin code:

```pseudo
Montrer "Bonjour"
```

The same override can be stored in the shared pseudocode.config.yml so the parser, formatter, lexer and MkDocs integration agree.

Types, collections and null values

```pseudo
notes est un tableau
profil est un dictionnaire
vus est un ensemble
position est un tuple
message est une chaîne
absence = Vide

Si note ∉ notes Alors:
    Afficher "Nouvelle note"
Fin
```

Vide means the same semantic null value as Python None. It is distinct from empty collections: [] is an empty list, {} an empty dictionary, and an empty set corresponds to set() / the localized set constructor supported by the core.

Repetition

```pseudo
Répéter 5 fois:
    Afficher "Bonjour"
Fin
```

and:

```pseudo
Répéter:
    n = n + 1
Jusqu'à n >= 10
Fin
```

are highlighted with the same structural grammar understood by the core transpiler.

MathJax inside pseudocode

TeX fragments remain MathJax-processable:

```pseudo
Si \Delta \geq 0 Alors:
    Afficher $x^2$
Fin
```

The plugin injects MathJax 3 only when requested and when a MathJax script is not already present on the page.

Python transpilation and flowcharts

Transpilation and algorigram generation live in the semantic core rather than this rendering plugin. That separation keeps MkDocs focused on presentation while all tools share one AST.

For example, the core can transpile:

Si x ∉ valeurs Alors:
    Afficher "Absent"
Fin

to Python:

if x not in valeurs:
    print("Absent")

and can export the same pseudocode as a Mermaid flowchart/algorigram. You can then embed the Mermaid output in any MkDocs setup that supports Mermaid.

Copying source

Rendered blocks embed the original pseudocode source in a base64 data attribute. The small browser hook included by the plugin lets Material's copy action copy the original pseudocode, not the MathJax-modified HTML representation.

Development

yarn setup
yarn bfc

yarn setup prefers editable sibling checkouts of:

../pseudocode-i18n
../pygments-lexer-pseudocode-i18n

when present. This is the recommended development layout for the coordinated ecosystem.

yarn bfc performs version synchronization, version checks, Ruff, pytest, documentation synchronization/checking, a strict MkDocs build, and Python package build.

Documentation is part of every project change. site/index.md is generated from this README, and the per-language reference pages are generated from the core language YAML files.

Versioning

package.json is the single source of truth for the project version. yarn version:sync propagates that version to pyproject.toml, mkdocs_pseudocode_i18n/__init__.py and this README.

MkDocs pages use the placeholder:

__MKDOCS_PSEUDOCODE_I18N_VERSION__

which is replaced at documentation build time from package.json by the MkDocs version hook.

Releases

A normal push updates main and GitLab Pages without creating a release.

A release workflow can stamp a version/tag, build the package, publish to PyPI through the configured GitLab Trusted Publishing pipeline, then create the GitLab Release.

See the full documentation for the exact project workflow.

License

GNU GPL-3.0-or-later.

AUTRES PROJETS de ce développeur

The Pseudocode ecosystem is designed as several small projects sharing one grammar instead of duplicating it:

See the repositories for the rest of the developer's open-source projects.

Release files for mkdocs-pseudocode-i18n 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mkdocs-pseudocode-i18n 0.3.0
File Size Uploaded
mkdocs_pseudocode_i18n-0.3.0.tar.gz 46.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mkdocs-pseudocode-i18n 0.3.0
File Interpreter ABI Platform
mkdocs_pseudocode_i18n-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 67.2 kB

Release files / mkdocs_pseudocode_i18n-0.3.0.tar.gz

Download URL mkdocs_pseudocode_i18n-0.3.0.tar.gz
Size 46.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b682707fa0cf3c4d24e9569bf95580e4f5230a22c06411a8757c54cf9270da9c
BLAKE2b-256 checksum
How to use checksums
a430ba631b994c50f5f4640f19df1e951f417b14726a4aed45e26f6671367abd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / mkdocs_pseudocode_i18n-0.3.0-py3-none-any.whl

Download URL mkdocs_pseudocode_i18n-0.3.0-py3-none-any.whl
Size 21.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a8d2306acea800a77fbd299f2e8db8d4b1c8d8fd724dc2d6eeb8bcc139e33fa4
BLAKE2b-256 checksum
How to use checksums
57217d69525c18948510b3053b15fe26ea1d083f7a85744a48b8591fae24e4cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.15

Release history Release notifications | RSS feed

0.9.12

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.1

2 release files

0.8.5

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page