yosymfony/toml: Parser PHP para el formato TOML de ficheros de configuración

Posted by victor on May 14th, 2013
php-logoTras varias semanas de desarrollo he publicado el primer componente para PHP bajo el nombre de YoSymfony en Github. Y es que la idea de este blog no es solo publicar noticias sino también aportar código a la comunidad PHP. yomsymfony/toml es un parser del formato de ficheros de configuración TOML creado por Tom Preston-Werner, cofundador de Github. La idea que subyace en este formato es la sencillez. Permitir crear ficheros de configuración intuitivos gracias a una semántica sencilla. En esencia, el fichero se forma por conjuntos de datos clave-valor que se pueden organizar en "namespaces". Un ejemplo:
[database] # namespace
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[database.querys] # Namespace. Se usa el '.' para separar
max_size_cache: 10 # expresado en MB
TOML soporta un conjunto de datos simples como string, booleanos, enteros, flotantes, arrays y fechas con formato ISO8601. Para facilitar la comprensión, en los arrays no se permiten mezclar varios tipos de datos. En cuanto a las claves, existe gran libertad para definirlas puesto que una clave comienza con el primer caracter distinto del espacio y finaliza con el último caracter distinto de espacio antes del igual:
~!@#$^&*()_+-`1234567890[]\|/?><.,;:' = 1 # esto es correcto

Implementación

El parser lo he implementado con la típica estructura de analizador léxico (lexer.php) - analizador sintáctico (parser.php). El primero se encarga de obtener tokens mientras que el segundo comprueba que estén en el orden correcto. La forma de usarlo es sencilla:
use Yosymfony\Toml\Toml;

$array = Toml::Parse('example.toml'); // fichero

print_r($array);

$array = Toml::Parse('key = [1,2,3]'); // en línea

print_r($array);
Para incorporar yosymfony/toml a cualquier proyecto basta con incluir la dependencia en composer.json y ejecutar composer update:
"require": {
    "yosymfony/toml": "dev-master"
}
  Github: yosymfony/tomlLicencia: MIT. Packagist: Información del paquete. TOML:  especificación v0.1.0.

Comments

comments powered by Disqus