You are here

Resaltar sintaxis en Asterisk

Asterisk::config::syntax::highlight (AKA syntax-highlight) es un módulo de Perl que nos permite resaltar la sintaxis de los ficheros de configuración de Asterisk y obtener código HTML. Como de costumbre en los módulos de perl lo podemos obtener e instalar usando CPAN.

sudo perl -MCPAN -e "install Asterisk::config::syntax::highlight"

Esta es la magia de Perl, donde podemos encontrar librerías para realizar un montón de tareas y además la magia de perl también reside en su sencillez, en este caso con 6 líneas de código tendremos un parser que nos mostrará los archivos de configuración de Asterisk usando bonitos colores en formato html:

#!/usr/bin/perl -w
use strict;
use Asterisk::config::syntax::highlight;
my $config = Asterisk::config::syntax::highlight->new();
$config->load_file(file=>"fichero.conf");
print join '<br />', @{$config->return_html_array_ref()};
exit;

El funcionamiento es sencillo: tenemos el método load_file que toma como argumento el fichero de configuración de Asterisk que queremos resaltar.

load_file(file=>"fichero.conf");

El método return_html_array_ref que retorna el código resaltado en formato HTML usando referencias a arrays.

return_html_array_ref();

Para configurar los colores en el código CSS "resaltado" devuelto por el método return_html_array_ref() necesitamos definir el estilo de todos los <spans> generados usando CSS. Cada <span> tendrá los siguientes nombres y significados de clases:

  • css-code - Nombre de la clase que para el elemento <pre> si tenemos está opción habilitada.
  • keyword - Keywords de Asterisk
  • function - Funciones de Asterisk
  • comment - Comentarios
  • value - Valores
  • identifier - Identificadores
  • exten - Igual que keyword

También tenemos en el sitio web de CPAN un ejemplo de código CSS para resaltar el código de las configuraciones de Asterisk:

span.keyword  {color: #00f}
span.function {color: #808}
span.comment   {color: #080}
span.value     {color: #f80}
span.identifier {color: #a66}
span.exten     {color: red}

Al ejecutar el script con un fichero ejemplo de configuración:

[default]
exten => steve,1,Dial(SIP/steve);
exten => mark,2,Dial(SIP/mark);

[mainmenu]
exten => s,1,Answer
exten => s,n,Background(thanks) ; "Thanks for calling press 1 for sales, 2 for support, ..."
exten => s,n,WaitExten
exten => 1,1,Goto(submenu,s,1)
exten => 2,1,Hangup

[submenu]
exten => s,1,Ringing ; Make them comfortable with 2 seconds of ringback
exten => s,n,Wait,2
exten => s,n,Background(submenuopts) ; "Thanks for calling the sales ;department. Press 1 for steve, 2 for..."
exten => s,n,WaitExten
exten => 1,1,Goto(default,steve,1)
exten => 2,1,Goto(default,mark,2)

Nos devolverá una línea con el siguiente código HTML:

<span class='exten'>[default]</span><br />
<span class='exten'>exten</span> =&gt; steve,1,<span class='keyword'>Dial</span><span class='identifier'>(</span>SIP/steve<span class='identifier'>)</span><span class='comment'>;</span><br />
<span class='exten'>exten</span> =&gt; mark,2,<span class='keyword'>Dial</span><span class='identifier'>(</span>SIP/mark<span class='identifier'>)</span><span class='comment'>;</span><br />
<br />
<span class='exten'>[mainmenu]</span><br />
<span class='exten'>exten</span> =&gt; s,1,<span class='keyword'>Answer</span><br />
<span class='exten'>exten</span> =&gt; s,n,<span class='keyword'>Background</span><span class='identifier'>(</span>thanks<span class='identifier'>)</span> <span class='comment'>; "Thanks for calling press 1 for sales, 2 for support, ..."</span><br />
<span class='exten'>exten</span> =&gt; s,n,<span class='keyword'>WaitExten</span><br /><span class='exten'>exten</span> =&gt; 1,1,<span class='keyword'>Goto</span><span class='identifier'>(</span>submenu,s,1<span class='identifier'>)</span><br />
<span class='exten'>exten</span> =&gt; 2,1,<span class='keyword'>Hangup</span><br />
<br />
<span class='exten'>[submenu]</span><br />
<span class='exten'>exten</span> =&gt; s,1,<span class='keyword'>Ringing</span> <span class='comment'>; Make them comfortable with 2 seconds of ringback</span><br />
<span class='exten'>exten</span> =&gt; s,n,<span class='keyword'>Wait</span>,2<br />
<span class='exten'>exten</span> =&gt; s,n,<span class='keyword'>Background</span><span class='identifier'>(</span>submenuopts<span class='identifier'>)</span> <span class='comment'>; "Thanks for calling the sales ;department. Press 1 for steve, 2 for..."</span><br />
<span class='exten'>exten</span> =&gt; s,n,<span class='keyword'>WaitExten</span><br />
<span class='exten'>exten</span> =&gt; 1,1,<span class='keyword'>Goto</span><span class='identifier'>(</span>default,steve,1<span class='identifier'>)</span><br />
<span class='exten'>exten</span> =&gt; 2,1,<span class='keyword'>Goto</span><span class='identifier'>(</span>default,mark,2<span class='identifier'>)</span>

Que enlazaremos con el anterior CSS para obtener el resaltado:

[default]
exten => steve,1,Dial(SIP/steve);
exten => mark,2,Dial(SIP/mark);

[mainmenu]
exten => s,1,Answer
exten => s,n,Background(thanks) ; "Thanks for calling press 1 for sales, 2 for support, ..."
exten => s,n,WaitExten
exten => 1,1,Goto(submenu,s,1)
exten => 2,1,Hangup

[submenu]
exten => s,1,Ringing ; Make them comfortable with 2 seconds of ringback
exten => s,n,Wait,2
exten => s,n,Background(submenuopts) ; "Thanks for calling the sales ;department. Press 1 for steve, 2 for..."
exten => s,n,WaitExten
exten => 1,1,Goto(default,steve,1)
exten => 2,1,Goto(default,mark,2)

Me ha gustado. Wink

Via: Voip Info

Asterisk: 
GNU/Linux: 
Qué te parece: 

Comments

Buenas, es una pregunta sobre IAX en realidad, existe algun softphone para nokia que sea IAX?
muchas gracias

Creo que depende un poco del modelo pero si usa un sistema operativo Symbian hay varios softphones pero de momento ninguno con soporte IAX que yo sepa.

Fring corre en Symbian y durante un tiempo se estuvo hablando de ofrecer soporte IAX, pero parece que ha quedado en el olvido. Undecided