Criação de Blocos para a ferramenta Blockly OpenCL
Com intuito de tornar a ferramenta Blockly OpenCL mais completa, esse tutorial objetiva apresentar como é criado novos blocos para adicionar a ferramenta, assim será possível você criar blocos para objetivos mais específicos e que não foram implementados.
OBS: Sugerimos que os novos blocos implementados, mesmo que para objetivos mais específicos, sejam implementados de maneira genérica.
Esse tutorial restringe-se a apresentar a criação de blocos para a ferramenta Blockly OpenCL, ou seja, outras ferramentas baseadas em blocos que utilizem a API Google Blockly, podem apresentar estruturas diferentes.
- A criação de Blocos
A criação de blocos é feita através do Block Factory, uma ferramenta disponibilizada pela API Google Blockly. Que oferece uma interface amigável disponibilizando a criação de blocos com o mesmo paradigma, arrastando blocos.
- A ferramenta é dividida em quatro partes
- A primeira é a de montagem dos blocos
- A segunda é a pré-visualização do bloco produzido em tempo real
- A terceira é a parte “Language Code” os códigos gerados para descrição dos blocos
- iv. O “Generator Stub” é para geração do código na linguagem desejada, no caso OpenCL
Figura 8 Interface do Block Factory
No quadro de desenvolvimento dos blocos, é possível observar um menu com quatro categorias de blocos possíveis para a personalização, são elas: Input, Field, Type e Colour
Na categoria Input é possível definir o tipo de formato que o bloco vai possuir, podendo ser do tipo “Value Input”, Statement Input”, “Dummy Input”. Cada tipo oferece recursos diferentes e configurações especificas além de configuração de cor, e restrições que são detalhadas a baixo.
Figura 8 Interface do Block Factory - blocos da Categoria input
O “Value input” define o bloco com encaixe simples, que podem ser apenas encaixe interno ou externo e pode-se definir as restrições dos tipos de blocos que podem ser conectados. Foi adicionado um campo texto e a cor, Como você pode ver no exemplo a baixo
O “Statement Input” define o bloco com o tipo de encaixe mais complexo, que permite mais tipos de conexões, como você pode ver no exemplo a baixo.
O “Dummy Input” define o bloco mais simples sem possibilidades de encaixe externo, ele apenas pode se conectar com blocos ligados a cima ou a baixo.
As outras categorias oferecem Opções de campos, cores e tipos para restrições e especificações dos tipos mostrados anteriormente.
- Gerando os códigos
Para inserir o código da linguagem desejada, no caso OpenCL é necessário editar o código do campo “Generator Stub” como no exemplo a seguir.
Blockly.JavaScript['cl_uchar'] = function (block) {
var variable_cl_uchar = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('cl_uchar'), Blockly.Variables.NAME_TYPE);
var value_name = Blockly.JavaScript.valueToCode(block, 'cl_uchar', Blockly.JavaScript.ORDER_ATOMIC);
// TODO: Assemble JavaScript into code variable.
var code = 'cl_uchar ' + variable_cl_uchar + ' = ' + value_name + ';\n';
return code;
};
No exemplo a cima é mostrado o código de um bloco que define uma variável do tipo cl_uchar, na variável a cima denominada var code, onde retorna a string cl_uchar que é a definição do tipo da variável, adiciona o nome da variável definina no bloco e atribuída variable_cl_uchar e o valor do bloco de ligação externa atribuída a variável value name
- Exportando os códigos para a ferramenta Blockly OpenCL
Para exportar os blocos gerados pela ferramenta Block Factory você precisa seguir os dois passos a seguir:
a. Copiar os códigos do campo “Language code” para o arquivo “blocks.js” localizado no diretório “js” da ferramenta Blockly OpenCL
É necessário copiar os códigos do campo “Generator Stub” para o arquivo “OpenCL.js” localizado no diretório “js” da ferramenta Blockly OpenCL.