nanabozo是一个命令行应用程序,将CHTML脚本转换为纯C代码。换句话说,它使您可以像PHP一样将HTML(或同等)与C/C ++混合。
这是一个简单的CHTML示例:
<?
#Define page_title“ Hello World示例”
int main(void){
char *world =“世界”;
/ *标题 */
打印(“ content-type:text/html; charset = utf-8 n n”);
?>
<html>
<头>
<title> <?= page_title?> </title>
</head>
<身体>
<h1> <?%“你好%!”,世界?> </h1>
</body>
</html>
<?
返回0;
} // end main()
?>
让我们将该片段放在一个名为helloworld.php的文件中(为什么不),然后我们这样执行nanabozo :
nanabozo helloworld.php helloworld.c
现在让我们检查一下helloworld.c样子:
/* *由Nanabozo生成(请勿编辑) *太阳1月14日11:08:12 CET 2018 */
这是一个信息性的自我解释性评论。您可以使用选项-c禁用该评论标头,将其传递为一个空字符串( -c "" ),或者如果需要( -c "$(cat license.txt)" ),则具有自己的评论。
#include <stdio.h> #Define Print(x)fputs(x,stdout)
默认情况下,包括stdio.h ,定义了函数print 。如您所见, stdout是我们将文本发送到的文件,就像另一个CGI应用程序一样:
/ *开始C(第1行) */
#Define page_title“ Hello World示例”
int main(void){
char *world =“世界”;
/ *标题 */
打印(“ content-type:text/html; charset = utf-8 n n”);
/ *结束C(第8行) */
在开始/结束评论中,我们的C代码的第一部分在此处给出,就像第一个文件中一样。您可以使用选项-N省略这些评论,但它们对于调试目的很有用。
这里没什么特别的,我们的CGI需要一个main()函数。请注意,该功能print用于发送通常的强制性标头:
打印(“ <html> n” “ <头> n” “ <title>”);
我们的HTML脚本开始。该功能print用于将其传递给stdout :
/ *开始C =(第11行) */ 打印(page_title); / *结束C =(第11行) */
标签<?=和?>之间的C代码作为函数print的参数。
另一个HTML部分如下:
打印(“ </title> n” “ </head> n” “ <身体> n” “ <h1>”);
然后,标签<?%和?>之间的内容是什么,作为参数传递给函数printf :
/ *开始C%(第14行) */ printf(“ Hello%S!”,世界); / *结束C%(第14行) */
最后,HTML的其余部分和main()函数的末端:
打印(“ </h1> n”
“ </body> n”
“ </html> n”);
/ *开始C(第17行) */
返回0;
} // end main()
/ *结束C(第20行) */
您可以编译helloworld.c ,并且您的CGI应用程序已准备就绪。急着,您可以尝试类似的事情:
nanabozo helloworld.php | gcc -xc -o helloworld.cgi-
nanabozo可以选择适应不同的工作流程。
该选项-M可用于包含脚本周围的基本功能定义。
选项-t可用于在任何其他输出之前发送基本的内容类型HTTP标头(Text/HTML,Charset UTF-8)。
选项-a可用于传递字符串以将其预先置于CHTML脚本的内容。
选项-Z可用于传递字符串以附加到CHTML脚本的内容。
我们的简单示例可以在没有main()函数的定义的情况下重写。在bash中,可能是这样:
nanabozo -a $'int main(void){ n'-z $' n n treturn 0; n}'helloworld.php helloworld.c
#注意等于:
Nanabozo -M helloworld.php helloworld.c
但是,您可以使事情变得更糟:
<Helloworld.php nanabozo -a“ $(cat myfile.h myfile.c)”> helloworld.c
选项-P可用于传递替代功能名称以替换print功能。
选项-F可用于传递替代功能名称以替换printf函数。
而且,如果您更换print和printf ,则不会包括stdio.h 。诸如:
Nanabozo -p Print -f printf helloworld.php helloworld.c
不会包含stdio.h ,也不会定义print 。您必须在您身边照顾他们。
选项-v打印版本信息和退出。
选项-H打印使用信息和退出。
如果您的CHTML文件的线路超过512个字符(人类可接受),则可以使用以更高的值定义的INPUTSIZE重编译。
而且,如果您发现一个错误或任何问题,请联系stan(at)astrorigin.com 。
简单地:
进行安装
Debian系统的包裹应在GitHub和首页上找到。
nanabozo已获得GPL V2许可证的许可:
Nanabozo- CHTML脚本编码的工具 版权(C)2018-2020 Stanislas Marquis <[email protected]> 该程序是免费的软件:您可以重新分配它和/或修改 它根据GNU通用公共许可证的条款发布 自由软件基金会,任何版本的许可证或 (您可以选择)任何以后的版本。 该程序的分布是希望它将有用的 但是没有任何保证;甚至没有暗示的保证 适合或适合特定目的的健身。看到 GNU通用公共许可证以获取更多详细信息。 您应该已经收到了GNU通用公共许可证的副本 以及这个程序。如果不是,请参见<https://www.gnu.org/licenses/>。