Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » md2bb – un convertisseur en ligne de commande de Markdown vers du BBCode
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

md2bb – un convertisseur en ligne de commande de Markdown vers du BBCode

Posté le 26/08/2024 18:09

Un convertisseur de Markdown vers du BBCode pour ne pas avoir à se torturer avec ce langage de formattage vraiment pas pratique .

Il supporte les tables et tout ce que l'on peut attendre d'un convertisseur de markdown, sauf le formattage avec des tirets du bas pour le gras et l'italique, parce que je n'aime pas ça .

Le code est ici :

>> md2bb.pl <<


Je l'ai réécrit plusieurs fois dans des langages de programmation différents. Cette version est la plus complète. Je n'avais jamais codé en perl avant, donc c'est sûrement loin d'être le meilleur code que j'ai écrit. Il est vraiment pas très élégant.

Pour convertir un fichier test.md :

$ perl md2bb.pl < test.md


Pour ajuster le BBCode produit, changez les constantes définies au début du programme (variables avec des noms en majuscules).

Il m'a servi à convertir mon tutoriel d'utilisation de développement d'un jeu de pong avec le fxsdk : https://www.planet-casio.com/Fr/forums/topic19641-last-tutoriel-de-creation-dun-jeu-de-pong-avec-le-fxsdkgint.html.

J'espère qu'il vous sera aussi utile.

Ancien texte de ce post
Cliquer pour enrouler

WIP: md2bb - un convertisseur en ligne de commande de Markdown vers du BBCode

Dépot : https://github.com/mibi88/md2bb

Il y a quelque jours j'ai commencé à coder un convertisseur Markdown vers BBCode, car il est bien plus pratique d'écrire de longs textes en Markdown qu'en BBCode. Il existe déjà des convertisseurs Markdown vers BBCode, mais le BBCode est différent d'un site web à l'autre, mon convertisseur peut donc être adapté pour des sites web différents assez facilement. Pour l'instant, seul phpBB et Planet Casio sont supportés. Tout cela semble merveilleux, mais mon convertisseur, qui vise à être compatible avec https://daringfireball.net/projects/markdown/dingus, est loin de l'être. Essayez de convertir le fichier test.md du dépôt, et vous verrez que beaucoup de choses ne sont pas encore converties, mais les fonctionnalités les plus basiques du markdown sont déjà supportés, comme vous pouvez le voir, car ce post lui même est écrit en markdown (markdown en pièce jointe).

Pour convertir du markdown en BBCode avec, il vous suffit d'entrer la commande suivante :

$ python3 main.py [fichier markdown] -o [fichier BBCode] -t planet-casio


-o spécifie le fichier de sortie. Si vous ne le spécifiez pas de fichier de sortie, le BBCode sera écrit sur la sortie standard.

-t spécifie le site web visé, ici planet-casio.

Toutes les contributions sont, bien sûr, bienvenues !

PS: J'ai du renommer le fichier markdown en .txt pour pouvoir l'ajouter en pièce jointe.


Fichier joint


Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 26/08/2024 21:25 | #


J'ai commencé à ajouter le support des hyperliens. Il ne manque que les liens qui utilisent des labels.
Dark storm Hors ligne Labélisateur Points: 11671 Défis: 179 Message

Citer : Posté le 27/08/2024 10:17 | #


Pour info dans le même registre Cake avait pondu ça : https://git.planet-casio.com/cake/textout
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 25858 Défis: 174 Message

Citer : Posté le 27/08/2024 10:44 | #


Wait si on enchaîne md2bb et textout ça fait un convertisseur MD → HTML :o #bigbrain #mindblown
Mon graphe (28 Juin): (MPM ; v5 ; Azur ; passe gint 3 ; ...) || Rogue Life
Alice En ligne Maître du Puzzle Points: 1553 Défis: 11 Message

Citer : Posté le 27/08/2024 11:04 | #


Senpai découvre Pandoc
💜
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 27/08/2024 21:34 | # | Fichier joint


Bon, ça avance bien. Pour vous montrer l'avancement je vous mets la conversion du fichier test avec la référence (https://daringfireball.net/projects/markdown/dingus) :

Conversion du fichier test
Cliquer pour enrouler
Some markdown

- Some markdown

Some markdown

Some markdown - Some markdown -- Some markdown
==============
Some markdown
==============
Some markdown
==============
Some markdown


Some markdown - Some markdown -- Some markdown
==============
Some markdown
==============
Some markdown
==============
Some markdown


- H2 header

line jump tests
inside paragraphs and wrapping paragraphs on multiple lines!

Some test em em of the strong strong formatting!

Horizontal rules

==============


==============


==============


==============


==============


==============


code


==============


code
    indented
with
    tabs


==============


code


==============


Multiline
  piece
of
  code


==============


Multiline
  piece
of
  code


This is an example inline link.

A link without a title

Label:

[id]: http://example.com/ "Optional Title Here"

[foo]: http://example.com/ "Optional Title Here" [foo]: http://example.com/ 'Optional Title Here' [foo]: http://example.com/ (Optional Title Here)

[link text][a] [link text][A]

[Google][]

[Google]: http://google.com/

Inline code


/* Some C code! */


`
A backtick (`) !


```
A backtick (`) !


There is a literal backtick (`) here.

![Alt text](/path/to/img.jpg)

![Alt text](/path/to/img.jpg "Optional title")

![Alt text][id]

[id]: url/to/image "Optional title attribute"

http://example.com/

Email address, replace the 【arobase】 with a @ and ▶ with a . : address【arobase】example▶com (Email address, replace the 【arobase】 with a @ and ▶ with a . : address【arobase】example▶com)

\literal asterisks\

Escaping \\\\*\_\{\}\[\]\(\)\#\+\-\.\!test

  1. List
  2. List
  3. List
  4. List
  5. List


==============


  • list
  • list
  • list


  • list
  • list
  • list
  • list
  • list
  • list


  • mixing elements
    1. hello
    2. bye
  • numbers and dots
    1. something
    2. something else
    3. indenting further


  • list with elements that span across multiple lines
  • or that fit on a single one.
  • they may contain some formatted text.
  • It also contains line
    jumps


==============


Some text followed by > Some quotes > that span across multiple lines > > And other quotes, indented further > > that also span across multiple lines > And going back to a lower level

I'm lazy, I'm only putting the angle bracket on the first line > of the long paragraph

==============


This


very

long code

which spans across multiple lines


Shouldn't be converted.

List indentation test

  • a
    • b
    • c
    • d
  • e
    • f
    • g
    • h
    • i
      • j
      • k
      • l
      • m
        • n
        • o
        • p
        • q
          • r
          • s
          • t
          • u
            • v
            • w
            • x
            • y
              • z


1.test

tes

  • test
    • test


==============


* mixing tabs and spaces
  * mixing tabs and spaces
   * mixing tabs and spaces
    * mixing tabs and spaces
     * mixing tabs and spaces


==============


* mixing tabs and spaces
     * mixing tabs and spaces
         * mixing tabs and spaces
             * mixing tabs and spaces
                 * mixing tabs and spaces


==============


List type tests

  1. numbered
  2. numbered


==============


  • unnumbered
  • unnumbered


==============


Extra spaces test

  • extra spaces test in lists


Référence
Cliquer pour enrouler


PS: Le test d'espaces en trop en fin de ligne ne passe que pour les listes, c'est juste que planet-casio vire les espaces en double.
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 28/08/2024 14:19 | # | Fichier joint


Les citations sont gérés très bizarrement par https://daringfireball.net/projects/markdown/dingus . Après quelque test j'ai écrit ce markdown. Vous allez être étonné du résultat :



Faut juste que j'implémente tout ça dans md2bb maintenant .
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 28/08/2024 14:58 | # | Fichier joint


J'ai ajouté le support de citations dans les listes :

  • long list with quotes
    quote
    quote
    quote
  • another quote quote quote
  • something else


is the text still correct ?

  • another test
    quote


is the text still correct ?

Markdown :

* long list with quotes
  > quote
  >> quote
  >>> quote
* another quote
  > quote
  >> quote
* something else

is the text still correct ?

* another test  
  > quote

is the text still correct ?


Pour comparer :


Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 28/08/2024 16:24 | #


J'ai ajouté une flag (-e) qui permet de désactiver les bugs intentionnels qui reproduisent le comportement de https://daringfireball.net/projects/markdown/dingus . Pour l'instant elle améliore que le comportement des citations pour qu'il soit plus proche de ce que l'on a l'habitude (on peut revenir à la citation dans laquelle la citation est contenue, et on peut mettre des citations à chaque élément d'une liste). Dans le futur cette flag permettra aussi de supporter les tableaux, le texte barré et le fonctionnement habituel des blocs de code.
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 13/07/2026 22:58 | #


Je suis en train d'en faire une nouvelle version plus propre (et aussi plus performante), en ne faisant plus attention à être compatible avec ce vieux parser de markdown. C'était débile.

Avec le nouveau convertisseur je pourrais facilement convertir mon tutoriel de jeu de pong avec le fxsdk .
Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 19/07/2026 21:40 | #


La nouvelle version que j'ai annoncé il y a quelque jours marche vraiment très mal, donc j'ai codé encore une autre version en Perl (c'était fun, j'avais encore jamais codé dans ce langage de programmation).

J'ai marqué les bugs et fonctionnalités manquantes en haut du code.

Voici le dépôt de cette nouvelle version : https://github.com/mibi88/md2bb.pl.

Le fichier de test est converti correctement :

Fichier de test converti en BBCode
Cliquer pour enrouler
Header 1

Header 2

Header 3

Header 4

Header 5

Header 6

italic (*) bold (**) strikethrough

This is a paragraph
with a line break.

Example Web site

Code

int main(int argv, char **argc) {

    return 0;
}

This is some *markdown*!

A test of inline code *test*, *!

Lists:

  • Red
  • Green
  • Blue

  1. Cyan
  2. Magenta
  3. Yellow
  4. Black

  • First item
  • Second item
  • Third item

  • Item 1
  • Item 2
  • Item 3

Complicated lists:

  1. Some text
  2. More text

    • Extra details
    • Yet another bullet

      • More items!

    • Yet another item

  3. Item 3

  • A bullet

  1. Item 1

    • Item 2

      • Item 3

        • Item 4

      • Item 5



---

  1. A long paragraph
    with a line break
  2. 2nd item


The prototype of malloc:

void *malloc(size_t size);


Yet another quote


And the first quote continues



Another quote





Header 1 Header 2
1 2
3 4

Alignment




Left Center  Right
1 3
More left-aligned text More centered text More right-aligned text


Mb88 En ligne Rédacteur Points: 1336 Défis: 3 Message

Citer : Posté le 24/07/2026 23:59 | #


md2bb supporte maintenant toute les fonctionnalités prévues ! Les bugs de la première version ont aussi été corrigés.

Il est aussi possible d'échapper le BBCode contenu dans le fichier markdown avec le caractère Unicode « gluon de mots » en assignant à la variable ESCAPE_BBCODE une valeur non-nulle.

Voici le fichier test converti avec la dernière version de md2bb.pl :

Fichier de test converti en BBCode
Cliquer pour enrouler
Header 1

Header 2

Header 3

Header 4

Header 5

Header 6

italic (*) bold (**) strikethrough

Mixing formatting: italic bold but not italic anymore.

Setext style header 1

Setext style header 2

This is a paragraph
with a line break.

Example Web site

Code

int main(int argv, char **argc) {

    return 0;
}

This is some *markdown*!

A test of inline code *test*, *!

Lists:

  • Red
  • Green
  • Blue

  1. Cyan
  2. Magenta
  3. Yellow
  4. Black

  • First item
  • Second item
  • Third item

  • Item 1
  • Item 2
  • Item 3

Complicated lists:

  1. Some text
  2. More text
    • Extra details
    • Yet another bullet
      • More items!
    • Yet another item
  3. Item 3
  • A bullet

  1. Item 1
    • Item 2
      • Item 3
        • Item 4
      • Item 5

***


  1. A long paragraph
    with a line break
  2. 2nd item


The prototype of malloc:

void *malloc(size_t size);


Yet another quote


And the first quote continues



Another quote


Header 1Header 2
12
34
Formatting in tables

codebold
italicnormal & strikethrough
Alignment

LeftCenterRight
1
2
3
More left-aligned text
More centered text
More right-aligned text



Je vais mettre à jour le post principal.

Et on finit par un petit @RDP .

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
captcha
Rafraîchissez la page si vous souhaitez obtenir un nouveau CAPTCHA.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2026 | Il y a 187 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd