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/>。