nanabozo é um aplicativo de linha de comando que traduz scripts CHTML em código C puro. Em outros termos, permite misturar HTML (ou equivalente) com C/C ++, como faria com o PHP.
Aqui está um exemplo simples de chtml:
<?
#Define Page_title "Hello World Exemplo"
int main (void) {
Char *World = "World";
/ * Cabeçalhos */
print ("Tipo de conteúdo: text/html; charset = utf-8 n n");
?>
<html>
<head>
<Title> <? = Page_title?> </title>
</head>
<Body>
<H1> <? % "Hello % s!", mundo?> </h1>
</body>
</html>
<?
retornar 0;
} // final main ()
?>
Vamos colocar esse snippet em um arquivo chamado helloworld.php (por que não), então executamos nanabozo como este:
nanabozo helloworld.php helloworld.c
E agora vamos examinar como é helloworld.c :
/* * Gerado por nanabozo (não edite) * Sun 14 de janeiro 11:08:12 CET 2018 */
Esse é um comentário informativo e auto-explicativo. Você pode desativar esse cabeçalho de comentário com a opção -C , passando uma string vazia ( -c "" ) ou fazer seu próprio comentário se você quiser ( -c "$(cat license.txt)" ):
#include <stdio.h> #Define Print (x) fputs (x, stdout)
Por padrão, stdio.h está incluído e a print de função definida. Como você pode ver, stdout é o arquivo para o qual estamos enviando nosso texto, assim como outro aplicativo CGI:
/ * Begin C (linha 1) */
#Define Page_title "Hello World Exemplo"
int main (void) {
Char *World = "World";
/ * Cabeçalhos */
print ("Tipo de conteúdo: text/html; charset = utf-8 n n");
/ * Fim C (linha 8) */
Incluído pelos comentários iniciais/finais , a primeira parte do nosso código C é fornecida aqui, como estava no primeiro arquivo. Você pode omitir esses comentários com a opção -n , se quiser, mas eles são úteis para fins de depuração.
Nada de especial aqui, nosso CGI precisa de uma função main() . Observe que a print da função é usada para enviar os cabeçalhos obrigatórios habituais:
print ("<html> n"
"<head> n"
"<title>");
Nosso script HTML começa. A print de função é usada para passar para stdout :
/ * Begin c = (linha 11) */ print (page_title); / * End c = (linha 11) */
O código C que estava entre as tags <?= E ?> É dado como argumento para a print da função.
Outra parte HTML segue:
print ("</title> n"
"</head> n"
"<body> n"
"<H1>");
Então, o que estava entre as tags <?% E ?> É passado como argumentos para a função printf :
/ * Comece c% (linha 14) */
printf ("Hello %s!", mundo);
/ * END C% (linha 14) */
Finalmente, o restante do HTML e o final da função main() :
print ("</h1> n"
"</body> n"
"</html> n");
/ * Begin C (linha 17) */
retornar 0;
} // final main ()
/ * Fim C (linha 20) */
Você pode compilar helloworld.c e seu aplicativo CGI está pronto. Com pressa, você pode tentar algo como:
nanabozo helloworld.php | gcc -xc -o helloworld.cgi -
nanabozo tem opções para acomodar para diferentes fluxos de trabalho.
A opção -m pode ser usada para incluir uma definição básica de função principal envolvendo seu script.
A opção -t pode ser usada para enviar um cabeçalho HTTP do tipo conteúdo básico (texto/html, charset utf-8) antes de qualquer outra saída.
A opção -a pode ser usada para passar uma string para prender o conteúdo do script chtml.
A opção -z pode ser usada para passar uma string para anexar o conteúdo do script chtml.
Nosso exemplo simples pode ser reescrito sem a definição da função main() . Em bash , poderia ser assim:
nanabozo -a $ 'int main (void) { n' -z $ ' n treturn 0; n}' helloworld.php helloworld.c
# Observe que é equivalente a:
nanabozo -m helloworld.php helloworld.c
No entanto, você pode piorar as coisas:
<helloworld.php nanabozo -a "$ (gat myfile.h myfile.c)"> helloworld.c
A opção -p pode ser usada para passar um nome de função alternativo para substituir a função print .
A opção -f pode ser usada para passar um nome de função alternativo para substituir a função printf .
E se você substituir print e printf , stdio.h não será incluído. Um comando como:
nanabozo -p print -f printf helloworld.php helloworld.c
não terá stdio.h incluído, nem print definido. Você tem que cuidar deles do seu lado.
A opção -V imprime informações e saídas da versão.
A opção -h imprime informações e saídas de uso.
Se o seu arquivo chtml tiver linhas com mais de 512 caracteres (o humanamente aceitável), você poderá recompilar com INPUTSIZE definido com um valor mais alto.
E se você encontrar um bug ou qualquer coisa problemática, entre em contato com stan(at)astrorigin.com .
Simplesmente:
faça de instalação-tudo
Um pacote para sistemas Debian deve ser encontrado no Github e na página inicial.
nanabozo está licenciado sob a licença GPL V2:
Nanabozo - ferramenta para codificação de scripts chtml Copyright (c) 2018-2020 Stanislas Marquis <[email protected]> Este programa é software livre: você pode redistribuí -lo e/ou modificar sob os termos da licença pública geral da GNU, conforme publicado por A Fundação Free Software, a versão 2 da licença, ou (por sua opção) Qualquer versão posterior. Este programa é distribuído na esperança de que seja útil, mas sem qualquer garantia; sem sequer a garantia implícita de Comercialização ou aptidão para um propósito específico. Veja o GNU Licença pública geral para obter mais detalhes. Você deveria ter recebido uma cópia da licença pública geral da GNU junto com este programa. Caso contrário, consulte <https://www.gnu.org/license/>.