nanabozo est une application de ligne de commande qui traduit les scripts CHTML en code C pur. En d'autres termes, il vous permet de mélanger HTML (ou équivalent) avec C / C ++, comme vous le feriez avec PHP.
Voici un exemple CHTML simple:
<?
#define page_title "Hello World Exemple"
int main (void) {
char * world = "world";
/ * En-têtes * /
print ("contenu-type: text / html; charset = utf-8 n n");
?>
<html>
<adal>
<Title> <? = Page_Title?> </ Title>
</ head>
<body>
<h1> <?% "Hello% s!", monde?> </h1>
</docy>
</html>
<?
retour 0;
} // fin Main ()
?>
Mettons cet extrait dans un fichier appelé helloworld.php (pourquoi pas), puis nous exécutons nanabozo comme ceci:
nanabozo helloworld.php helloworld.c
Et maintenant, examinons à quoi ressemble helloworld.c :
/ * * Généré par Nanabozo (ne pas modifier) * Dimanche 14 janvier 11:08:12 CET 2018 * /
Il s'agit d'un commentaire d'information et d'explication de soi. Vous pouvez désactiver cet en-tête de commentaire avec l'option -C , en le faisant passer une chaîne vide ( -c "" ), ou avoir votre propre commentaire à la place si vous voulez ( -c "$(cat license.txt)" ):
#include <stdio.h> #define print (x) fputs (x, stdout)
Par défaut, stdio.h est inclus et l' print fonction définie. Comme vous pouvez le voir, stdout est le fichier auquel nous envoyons notre texte, tout comme une autre application CGI:
/ * Commencer C (ligne 1) * /
#define page_title "Hello World Exemple"
int main (void) {
char * world = "world";
/ * En-têtes * /
print ("contenu-type: text / html; charset = utf-8 n n");
/ * End C (ligne 8) * /
Fermé par les commentaires Begin / End , la première partie de notre code C est donnée ici, comme dans le premier fichier. Vous pouvez omettre ces commentaires avec l'option -N si vous le souhaitez, mais ils sont utiles à des fins de débogage.
Rien de spécial ici, notre CGI a besoin d'une fonction main() . Notez que l' print de fonction est utilisée pour envoyer les en-têtes obligatoires habituels:
print ("<html> n"
"<éad- n"
"<Title>");
Notre script HTML commence. L' print de fonction est utilisée pour la transmettre à stdout :
/ * Commencer c = (ligne 11) * / print (page_title); / * End C = (ligne 11) * /
Le code C qui se trouvait entre les balises <?= Et ?> Est donné comme argument à print de la fonction.
Une autre partie HTML suit:
Print ("</Title> n"
"</ head> n"
"<body> n"
"<h1>");
Ensuite, qu'est-ce qui était entre les balises <?% Et ?> Est passé comme arguments à la fonction printf :
/ * Commencer C% (ligne 14) * /
printf ("Hello% s!", monde);
/ * End C% (ligne 14) * /
Enfin, le reste du HTML et la fin de la fonction main() :
print ("</h1> n"
"</ body> n"
"</ html> n");
/ * Commencer C (ligne 17) * /
retour 0;
} // fin Main ()
/ * End C (ligne 20) * /
Vous pouvez compiler helloworld.c et votre application CGI est prête. À la hâte, vous pouvez essayer quelque chose comme:
nanabozo helloworld.php | gcc -xc -o helloworld.cgi -
nanabozo a des options pour accueillir pour différents workflows.
L'option -M peut être utilisée pour inclure une définition de fonction principale en termes de définition de fonction principale autour de votre script.
L'option -T peut être utilisée pour envoyer un en-tête HTTP de type contenu de base (texte / html, charset UTF-8) avant toute autre sortie.
L'option -a peut être utilisée pour passer une chaîne pour représenter le contenu du script CHTML.
L'option -z peut être utilisée pour passer une chaîne pour ajouter au contenu du script CHTML.
Notre exemple simple pourrait être réécrit sans la définition de la fonction main() . En bash , cela pourrait être comme ceci:
nanabozo -a $ 'int main (void) { n' -z $ ' n treturn 0; n}' helloworld.php helloworld.c
# Remarque qui équivaut à:
nanabozo -m helloworld.php helloworld.c
Vous pouvez cependant aggraver les choses:
<helloworld.php nanabozo -a "$ (cat myfile.h myfile.c)"> helloworld.c
L'option -p peut être utilisée pour passer un nom de fonction alternatif pour remplacer la fonction print .
L'option -f peut être utilisée pour passer un nom de fonction alternatif pour remplacer la fonction printf .
Et si vous remplacez à la fois print et printf , stdio.h ne sera pas inclus. Une commande telle que:
nanabozo -p print -f printf helloworld.php helloworld.c
n'aura pas stdio.h inclus, ni print défini. Vous devez prendre soin d'eux de votre côté.
L'option -v imprime les informations et les sorties de la version.
L'option -H imprime les informations d'utilisation et les sorties.
Si votre fichier CHTML contient des lignes de plus de 512 caractères (l'humanablement acceptable), vous pouvez recompiler avec INPUTSIZE définie avec une valeur plus élevée.
Et si vous trouvez un bug ou quelque chose de problématique, veuillez contacter stan(at)astrorigin.com .
Simplement:
faire l'installation
Un package pour les systèmes Debian doit être trouvé sur GitHub et la page d'accueil.
nanabozo est autorisé sous la licence GPL V2:
Nanabozo - outil pour le codage de script CHTML Copyright (c) 2018-2020 Stanislas Marquis <[email protected]> Ce programme est un logiciel gratuit: vous pouvez le redistribuer et / ou modifier Il en vertu des termes de la licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de la licence, soit (à votre option) Toute version ultérieure. Ce programme est distribué dans l'espoir qu'il sera utile, mais sans aucune garantie; sans même la garantie implicite de La qualité marchande ou la forme physique dans un but particulier. Voir le Licence publique générale GNU pour plus de détails. Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, voir <https://www.gnu.org/licenses/>.