PHPackages                             metarisc-odt/lexical-parser - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. metarisc-odt/lexical-parser

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

metarisc-odt/lexical-parser
===========================

A lexical parser.

0108↓46.6%PHP

Since May 21Pushed 2w agoCompare

[ Source](https://github.com/metarisc/lexical-parser-php)[ Packagist](https://packagist.org/packages/metarisc-odt/lexical-parser)[ RSS](/packages/metarisc-odt-lexical-parser/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Lexical to ODT Converter
========================

[](#lexical-to-odt-converter)

Un convertisseur PHP qui transforme du contenu au format [Lexical](https://lexical.dev/) (JSON AST) en documents OpenDocument Text (ODT).

Description
-----------

[](#description)

Ce projet permet de convertir des structures de données JSON générées par l'éditeur Lexical en documents ODT professionnels. Il parse l'arbre syntaxique abstrait (AST) de Lexical et génère le XML ODT correspondant en respectant les spécifications OpenDocument Format (ODF).

### Fonctionnalités

[](#fonctionnalités)

- **Paragraphes** avec formatage complet
- **Titres** (headings) de niveau 1 à 6
- **Formatage de texte** : gras, italique, souligné, code, exposant, indice
- **Couleurs** : couleur de texte et fond (surbrillance)
- **Liens hypertextes**
- **Listes** ordonnées et non ordonnées (avec imbrication)
- **Tableaux** avec support des cellules fusionnées
- **Images** avec dimensions
- **Sauts de ligne** et **sauts de page**
- **Alignement de texte** (gauche, centre, droite, justifié)

### Composants

[](#composants)

#### 1. **Converter** (`src/Converter/`)

[](#1-converter-srcconverter)

- Point d'entrée principal de l'application
- Initialise le parser et le renderer approprié
- Orchestre le processus de conversion

#### 2. **Parser** (`src/Parser/`)

[](#2-parser-srcparser)

- **LexicalParser** : Parse le JSON Lexical et construit un arbre de nodes PHP
- Transforme la structure JSON en objets PHP typés et structurés

#### 3. **Nodes** (`src/Nodes/`)

[](#3-nodes-srcnodes)

Représentation objet de l'AST Lexical :

- `RootNode` : Nœud racine du document
- `ParagraphNode` : Paragraphe de texte
- `HeadingNode` : Titre (h1 à h6)
- `TextNode` : Fragment de texte avec formatage
- `LinkNode` : Lien hypertexte
- `ListNode` / `ListItemNode` : Listes et éléments de liste
- `TableNode` / `TableRowNode` / `TableCellNode` : Tableaux
- `ImageNode` : Images
- `LineBreakNode` : Saut de ligne
- `PageBreakNode` : Saut de page

#### 4. **Renderer** (`src/Renderer/`)

[](#4-renderer-srcrenderer)

- **OdtRenderer** : Implémente le pattern Visitor
- Traverse l'arbre de nodes et génère le XML ODT correspondant
- Gère la création des styles automatiques ODT
- Produit un XML conforme aux spécifications OpenDocument

#### 5. **Odt** (`src/Odt.php`)

[](#5-odt-srcodtphp)

- Classe utilitaire pour manipuler les fichiers ODT (extends ZipFile)
- Gère l'assemblage du document final
- Intègre les styles automatiques et le contenu XML

Structure du code
-----------------

[](#structure-du-code)

```
src/
├── Odt.php                      # Classe utilitaire ODT
├── Converter/
│   ├── Converter.php            # Convertisseur principal
│   └── ConverterInterface.php
├── Parser/
│   ├── LexicalParser.php        # Parser JSON → Nodes
│   └── ParserInterface.php
├── Renderer/
│   ├── OdtRenderer.php          # Visitor Nodes → XML ODT
│   └── RendererInterface.php
└── Nodes/
    ├── NodeInterface.php        # Interface commune
    ├── RootNode.php
    ├── LineBreakNode.php
    ├── PageBreakNode.php
    ├── Element/                 # Nœuds de type élément
    │   ├── ParagraphNode.php
    │   ├── HeadingNode.php
    │   ├── ImageNode.php
    │   ├── Text/
    │   │   ├── TextNode.php
    │   │   └── LinkNode.php
    │   ├── List/
    │   │   ├── ListNode.php
    │   │   └── ListItemNode.php
    │   └── Table/
    │       ├── TableNode.php
    │       ├── TableRowNode.php
    │       └── TableCellNode.php
    └── Styles/                  # Classes de gestion des styles
        ├── Style.php
        └── TextFormat.php

```

###  Health Score

25

—

LowBetter than 36% of packages

Maintenance63

Regular maintenance activity

Popularity14

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/7674d7c919b73651a0bed70e43868a04077a812ea65f6aea72582fe68522d87b?d=identicon)[HabibErfani](/maintainers/HabibErfani)

![](https://www.gravatar.com/avatar/bb760faa80d03d742ca0cf4bed016f88bfcc56ca22d906cc89980964286286c7?d=identicon)[LoupMyr](/maintainers/LoupMyr)

![](https://www.gravatar.com/avatar/dc36fe39f1154e547de6ac232f76990c21e7cba63939fe4aa746237177a848c5?d=identicon)[lucasbauduin](/maintainers/lucasbauduin)

---

Top Contributors

[![LoupMyr](https://avatars.githubusercontent.com/u/100768194?v=4)](https://github.com/LoupMyr "LoupMyr (9 commits)")[![kdubuc](https://avatars.githubusercontent.com/u/895661?v=4)](https://github.com/kdubuc "kdubuc (2 commits)")[![habibErfani](https://avatars.githubusercontent.com/u/94376141?v=4)](https://github.com/habibErfani "habibErfani (1 commits)")

### Embed Badge

![Health badge](/badges/metarisc-odt-lexical-parser/health.svg)

```
[![Health](https://phpackages.com/badges/metarisc-odt-lexical-parser/health.svg)](https://phpackages.com/packages/metarisc-odt-lexical-parser)
```

###  Alternatives

[nickurt/laravel-stopforumspam

StopForumSpam for Laravel 11.x/12.x/13.x

6961.4k](/packages/nickurt-laravel-stopforumspam)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
