Color json

Méthode pour peinturlurer du texte json stringifié avec *.
<code 4D>
//Json_colorise (inOut_o) -> txt
//colorise du json stringifié par 4D
C_OBJET($1;$io_o)

C_ENTIER LONG($pos_l;$len_l;$i_l;$j_l)
C_ENTIER LONG($indent_l)

//_

ASSERT(Nombre de paramètres>0)
ASSERT($1#Null)
$io_o:=$1
ASSERT($io_o.json#Null)

$json_t:=$io_o.json
TABLEAU TEXTE($line_at;0)
Str_explode (->$line_at;$json_t;"\n")
Si ($io_o.colors=Null) //default colors
$io_o.colors.tag:=“red”
$io_o.colors.tagOdd:=“lime”
$io_o.colors.invisible:=“lightgray”
$io_o.colors.property:=“blue” //“green”
$io_o.colors.valueText:=“teal”
$io_o.colors.valueNum:=“olive” //“blue”
$io_o.colors.valueBool:=“orange”
Fin de si

$indent_t:="· " //Middle Dot: alt+shift+f on mac keyboard * dec 183 * hex 0x00b7
$indent_t:=Caractère(0x00B7)+Caractère(Espacement)
$startTag_t:="<SPAN STYLE=“color:”
$endTag_t:=""

$propRx_t:=""\w{1,50}": " //property
TABLEAU TEXTE($quotedString_at;0)
Boucle ($i_l;1;Taille tableau($line_at))
Si ($i_l=20)

Fin de si 
$ligne_t:=$line_at{$i_l}
Si (Trouver regex("^\t{1,30}";$ligne_t;1;$pos_l;$len_l))  //number of leading tab
	$indent_l:=$len_l
	$ligne_t:=Sous chaîne($ligne_t;$pos_l+$len_l)
Sinon 
	$indent_l:=0
Fin de si 
Au cas ou 
	: (Trouver regex(",$";$ligne_t;1;$pos_l;$len_l))
		  //end prop
	: (Trouver regex("\\{$";$ligne_t;1;$pos_l;$len_l))
		  //new obj
	: (Trouver regex("\\[$";$ligne_t;1;$pos_l;$len_l))
		  //new coll
	: (Trouver regex("\\}$";$ligne_t;1;$pos_l;$len_l))
		  //end obj
	: (Trouver regex("\\]$";$ligne_t;1;$pos_l;$len_l))
		  //end coll
	Sinon 
		$pos_l:=0
		$len_l:=0
Fin de cas 
$end_t:=Sous chaîne($ligne_t;$pos_l;$len_l)
$posStartOrEnd_l:=$pos_l
$lenStartOrEnd_l:=$len_l

Trouver regex($propRx_t;$ligne_t;1;$pos_l;$len_l)  //line starts with property
$prop_t:=Sous chaîne($ligne_t;$pos_l;$len_l)
Si ($pos_l>0)
	Si ($posStartOrEnd_l=0)
		$value_t:=Sous chaîne($ligne_t;$pos_l+$len_l)
	Sinon 
		$value_t:=Sous chaîne($ligne_t;$pos_l+$len_l;$posStartOrEnd_l-$len_l-1)
	Fin de si 
Sinon 
	Si ($posStartOrEnd_l=0)
		$value_t:=Sous chaîne($ligne_t;1)
	Sinon 
		$value_t:=Sous chaîne($ligne_t;1;$posStartOrEnd_l-$lenStartOrEnd_l)
	Fin de si 
Fin de si 

$lineST_t:=""
Boucle ($j_l;1;$indent_l)
	Si ($j_l%2=1)
		$lineST_t:=$lineST_t+\
		$startTag_t+$io_o.colors.tag+"\">"+$indent_t+$endTag_t
	Sinon 
		$lineST_t:=$lineST_t+\
		$startTag_t+$io_o.colors.tagOdd+"\">"+$indent_t+$endTag_t
	Fin de si 
Fin de boucle 

Si (Longueur($prop_t)>0)
	$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.property+"\">"+$prop_t+$endTag_t
Fin de si 
Si ($value_t#"")
	Au cas ou 
		: ($value_t="}") | ($value_t="]")  //] or } followed by ,
			Si ($indent_l%2=0)
				$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.tag+"\">"+$value_t+$endTag_t
			Sinon 
				$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.tagOdd+"\">"+$value_t+$endTag_t
			Fin de si 
		: ($value_t="\"@")  //text
			$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.valueText+"\">"+$value_t+$endTag_t
		: ($value_t="true") | ($value_t="false")  //bool
			$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.valueBool+"\">"+$value_t+$endTag_t
		Sinon   //other (#TODO…)
			$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.valueNum+"\">"+$value_t+$endTag_t
	Fin de cas 
Fin de si 
Si ($indent_l%2=1)
	$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.tag+"\">"+$end_t+$endTag_t
Sinon 
	$lineST_t:=$lineST_t+$startTag_t+$io_o.colors.tagOdd+"\">"+$end_t+$endTag_t
Fin de si 
$line_at{$i_l}:=$lineST_t

Fin de boucle
$io_o.json:=Str_implode (->$line_at;"\r")
//_
</code 4D>

https://forums.4d.com/4DBB_Main/x_User/4467/files/28536700.7z
Anti râleurs qui se croient malins à ne plus comprendre que l’anglais :mrgreen:
(en supposant que ça intéresse quelqu’un)