Texto originalmente publicado no portal iMasters.
Lua como Mídia de NCL
A seguir alguns conceitos importantes que devemos ter em mente.
Como vimos no artigo passado, um NCLua é um programa escrito em linguagem Lua e que é executado através de um documento NCL. Por sua vez, um documento NCL apenas define como os objetos de mídia são estruturados e relacionados no tempo e espaço, como uma linguagem de “cola”. A relação entre essas diversas mídias é definida através dos conectores.
Uma mídia não tem qualquer comunicação com outra mídia declarada no documento. Sendo assim, o escopo de uma determinada mídia se restringe aos elos definidos no documento e aos eventos gerados para ela ou por ela.
Todas as regras válidas para um nó de vídeo, texto ou imagem, também são válidas para scripts Lua. Quero dizer, todo ciclo de vida, de qualquer nó, é controlado pelo formatador NCL, ele é quem decide se o nó para, começa ou pausa.
Incrementando um pouco mais: já que todas as regras se aplicam igualmente aos nós, podemos definir âncoras para o nó Lua, certo? A sintaxe NCL permite que um elemento

Então, aplicando isso a um nó Lua temos:

O código corresponde à figura. Simples assim:
Bibliotecas NCLua
Para que as duas linguagens se entendam foram definidos quatro novos módulos para NCLua, além do conjunto padrão de bibliotecas. São eles:
Este artigo irá apresentar o módulo event.
O script Lua, ao ser iniciado, executa seus procedimentos apenas uma vez e então se torna orientado a eventos e, por isso, até podemos chamá-lo de tratador de eventos.
Como já dito, a comunicação entre Lua e NCL se dá através dos eventos definidos pela linguagem NCL. Esses eventos, para efeito de código, têm o formato de tabelas Lua. Então quando um nó Lua é iniciado pelo documento NCL, a seguinte tabela é gerada:
A tabela chamada evt com 3 campos, class, type e action, diz que a classe de eventos é ‘ncl’, que o tipo de evento foi de apresentação e a ação do formatador que desencadeou a apresentação foi um ‘start’.
Os elementos da tabela acima:
1. class: São 5 tipos de classes: ‘key’, ‘ncl’, ‘user’, ‘sms’ e ‘tcp’, focaremos este artigo na classe “ncl”.
2. type: Pode assumir os valores ‘presentation’ ou ‘attribution’
Neste ponto irei explorar os dois valores possíveis para type:
2.1. presentation: Eventos de apresentação controlam a exibição do nó NCLua.
Eventos de apresentação estão sempre ligados ao nó como um todo ou a âncoras do nó. O documento NCL pode dar um “start” em uma âncora especifica que foi declarada no nó Lua, como a âncora a1 da Figura 2.
2.2. attribution: Eventos de atribuição controlam as propriedades do nó NCLua.
Neste caso a manipulação é na propriedade do nó, como a p1 da Figura 2, e um novo campo é associado, o value, que recebe ou atribui valores aquela propriedade.
Resumindo:
• type: ‘attribution’
• property: [string] Nome da propriedade (name) associada ao evento.
• value: [string] Novo valor a ser atribuído à propriedade
3. action: Pode assumir os seguintes valores: ’start’, ’stop’, ‘abort’, ‘pause’ e ‘resume’
Pois bem, a tabela foi gerada, mas aonde é usada? No script Lua, o tratador de eventos. E para que ele seja capaz de capturar os eventos gerados é preciso registrar uma função tratadora:
No script acima estou declarando uma função e dizendo que esta função receberá todos os eventos gerados (note que ela recebe como parâmetro uma tabela evt). Assim, o código da função “tratadora” pode manipular a tabela que recebeu, e identificar o tipo de evento e a ação, por exemplo.
Até aqui, vimos uma função do módulo event, a função register, e também o formato da tabela de eventos e seus respectivos campos.
Agora uma nova função de event será apresentada, a função post, que é necessária para que o scrpt Lua se comunique com o documento NCL.
Comunicação Lua para NCL
Em termos mais práticos vou exemplificar como um sript Lua sinaliza o formatador NCL para parar a execução do nó.
De maneira similar, se eu quisesse para a execução de uma âncora do nó, o elemento área, deveria estar presente no código.
Uma simples aplicação do código acima. O script sinaliza a âncora para parar. O formatador detecta que a âncora foi parada e, através dos elos associa esse evento ao inicio de uma figura, de background por exemplo.
Para saber mais:
Vimos neste artigo uma explanação geral sobre a biblioteca NCLua, continuarei no próximo artigo com este assunto.
Para quem ficou curioso recomendo fortemente a leitura do tutorial sobre NCLua escrito pelo Francisco Santana da PUC-Rio, la existe toda documentação sobre os métodos, exemplos e onde achar mais bibliografia sobre o assunto.
O link é:
http://www.telemidia.puc-rio.br/~francisco/nclua/index.html




