nanabozo هو تطبيق سطر الأوامر الذي يترجم البرامج النصية CHTML إلى رمز C النقي. بعبارات أخرى ، يتيح لك مزج HTML (أو ما يعادلها) مع C/C ++ ، كما تفعل مع PHP.
فيما يلي مثال بسيط لـ CHTML:
<؟
#Define Page_title "Hello World Example"
int main (void) {
Char *World = "World" ؛
/ * الرؤوس */
print ("نوع المحتوى: text/html ؛ charset = utf-8 n n") ؛
؟>
<html>
<head>
<title> <؟ = page_title؟> </title>
</head>
<body>
<H1> <؟ ٪ "Hello ٪ S!" ، العالم؟> </h1>
</body>
</html>
<؟
العودة 0 ؛
} // end main ()
؟>
دعونا نضع هذا المقتطف في ملف يسمى 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" ؛
/ * الرؤوس */
print ("نوع المحتوى: text/html ؛ charset = utf-8 n n") ؛
/ * End C (السطر 8) */
مرفقة بتعليقات البداية/النهاية ، يتم تقديم الجزء الأول من رمز C هنا ، كما كان في الملف الأول. يمكنك حذف هذه التعليقات مع الخيار -إذا كنت تريد ، لكنها مفيدة لأغراض تصحيح الأخطاء.
لا شيء خاص هنا ، يحتاج CGI لدينا إلى وظيفة main() . لاحظ أن print الوظيفة تستخدم لإرسال الرؤوس الإلزامية المعتادة:
طباعة ("<html> n"
"<head> n"
"<title>") ؛
يبدأ نص HTML الخاص بنا. يتم استخدام print الوظيفة لتمريرها إلى stdout :
/ * ابدأ C = (السطر 11) */ print (page_title) ؛ / * end 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 ؛
} // end main ()
/ * End 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 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 و Homepage.
nanabozo مرخصة بموجب ترخيص GPL V2:
nanabozo - أداة ترميز البرنامج النصي CHTML حقوق الطبع والنشر (C) 2018-2020 Stanislas Marquis <[email protected]> هذا البرنامج هو برنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة GNU العامة العامة كما نشرها مؤسسة البرمجيات المجانية ، إما الإصدار 2 من الترخيص ، أو (في خيارك) أي إصدار لاحق. يتم توزيع هذا البرنامج على أمل أن يكون مفيدًا ، لكن بدون أي ضمان ؛ دون حتى الضمان الضمني ل القابلية للتسويق أو اللياقة لغرض معين. انظر رخصة عامة عامة لمزيد من التفاصيل. يجب أن تكون قد تلقيت نسخة من رخصة GNU العامة العامة جنبا إلى جنب مع هذا البرنامج. إذا لم يكن الأمر كذلك ، راجع <https://www.gnu.org/licenses/>.