nanabozo เป็นแอปพลิเคชั่นบรรทัดคำสั่งที่แปล สคริปต์ CHTML เป็นรหัส C บริสุทธิ์ ในแง่อื่น ๆ มันช่วยให้คุณผสม HTML (หรือเทียบเท่า) กับ C/C ++ เช่นเดียวกับที่คุณทำกับ PHP
นี่คือตัวอย่าง CHTML ที่เรียบง่าย:
-
#define page_title "Hello World Example"
int main (void) {
Char *World = "World";
/ * ส่วนหัว */
พิมพ์ ("เนื้อหาประเภท: ข้อความ/html; charset = utf-8 n n");
-
<html>
<head>
<title> <? = page_title?> </title>
</head>
<body>
<h1> <? % "สวัสดี % s!", โลก?> </h1>
</body>
</html>
-
กลับ 0;
} // สิ้นสุดหลัก ()
-
ลองใส่ตัวอย่างนั้นไว้ในไฟล์ที่เรียกว่า helloworld.php (ทำไมไม่) จากนั้นเราเรียกใช้ nanabozo เช่นนี้:
nanabozo helloworld.php helloWorld.c
และตอนนี้เรามาตรวจสอบว่า helloworld.c เป็นอย่างไร:
- * สร้างโดย Nanabozo (อย่าแก้ไข) * อาทิตย์ 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 Example"
int main (void) {
Char *World = "World";
/ * ส่วนหัว */
พิมพ์ ("เนื้อหาประเภท: ข้อความ/html; charset = utf-8 n n");
/ * สิ้นสุด C (บรรทัด 8) */
ล้อมรอบด้วยความคิดเห็น เริ่มต้น/สิ้นสุด ส่วนแรกของรหัส C ของเราได้รับที่นี่เช่นเดียวกับในไฟล์แรก คุณสามารถละเว้นความคิดเห็นเหล่านั้นด้วย ตัวเลือก -n หากคุณต้องการ แต่มีประโยชน์สำหรับการดีบัก
ไม่มีอะไรพิเศษที่นี่ CGI ของเราต้องการฟังก์ชั่น main() โปรดทราบว่า print ฟังก์ชั่นใช้เพื่อส่งส่วนหัวที่บังคับปกติ:
พิมพ์ ("<html> n"
"<head> n"
"<title>");
สคริปต์ HTML ของเราเริ่มต้นขึ้น ฟังก์ชั่น print ใช้เพื่อส่งผ่านไปยัง stdout :
/ * เริ่ม c = (บรรทัด 11) */ พิมพ์ (page_title); / * สิ้นสุด c = (บรรทัด 11) */
รหัส C ที่อยู่ระหว่างแท็ก <?= และ ?> ได้รับเป็นอาร์กิวเมนต์ใน print ฟังก์ชั่น
ส่วน HTML อื่นดังต่อไปนี้:
พิมพ์ ("</title> n"
"</head> n"
"<body> n"
"<H1>");
ถ้าอย่างนั้นมีอะไรอยู่ระหว่างแท็ก <?% และ ?> ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชั่น printf :
/ * เริ่ม C% (บรรทัด 14) */
printf ("hello %s!", โลก);
/ * End C% (บรรทัด 14) */
ในที่สุดส่วนที่เหลือของ HTML และส่วนท้ายของฟังก์ชั่น main() :
พิมพ์ ("</h1> n"
"</body> n"
"</html> n");
/ * เริ่ม C (บรรทัด 17) */
กลับ 0;
} // สิ้นสุดหลัก ()
/ * สิ้นสุด C (บรรทัด 20) */
คุณสามารถรวบรวม helloworld.c และแอปพลิเคชัน CGI ของคุณพร้อมแล้ว รีบร้อนคุณสามารถลองทำเช่น:
nanabozo helloworld.php | gcc -xc -o helloworld.cgi -
nanabozo มีตัวเลือกในการรองรับสำหรับเวิร์กโฟลว์ที่แตกต่างกัน
ตัวเลือก -m สามารถใช้เพื่อรวมนิยามฟังก์ชั่นหลักพื้นฐานรอบสคริปต์ของคุณ
ตัวเลือก -T สามารถใช้เพื่อส่งส่วนหัว HTTP ประเภทเนื้อหาพื้นฐาน (ข้อความ/HTML, Charset UTF-8) ก่อนเอาต์พุตอื่น ๆ
ตัวเลือก -A สามารถใช้เพื่อส่งสตริงเพื่อ เตรียม เนื้อหาของสคริปต์ CHTML
ตัวเลือก -z สามารถใช้เพื่อส่งสตริงเพื่อ ต่อท้าย เนื้อหาของสคริปต์ Chtml
ตัวอย่างง่ายๆของเราสามารถเขียนใหม่ได้โดยไม่ต้องมีคำจำกัดความของฟังก์ชั่น main() ใน bash มันอาจเป็นเช่นนี้:
nanabozo -a $ 'int main (void) { n' -z $ ' 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 ทั่วไปที่เผยแพร่โดย มูลนิธิซอฟต์แวร์ฟรีไม่ว่าจะเป็นรุ่น 2 ของใบอนุญาตหรือ (ตามตัวเลือกของคุณ) เวอร์ชันในภายหลัง โปรแกรมนี้มีการแจกจ่ายด้วยความหวังว่าจะมีประโยชน์ แต่ไม่มีการรับประกันใด ๆ โดยไม่มีการรับประกันโดยนัยของ ความสามารถในการค้าหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดู ใบอนุญาตสาธารณะ GNU ทั่วไปสำหรับรายละเอียดเพิ่มเติม คุณควรได้รับสำเนาใบอนุญาตสาธารณะ GNU ทั่วไป พร้อมกับโปรแกรมนี้ ถ้าไม่ดู <https://www.gnu.org/licenses/>