nanabozo -это приложение командной строки, которое переводит сценарии CHTML в чистый C-код. С другой стороны, он позволяет вам смешивать HTML (или эквивалент) с C/C ++, как вы бы с PHP.
Вот простой пример CHTML:
<?
#define page_title "Hello World Пример"
int main (void) {
char *world = "world";
/ * Заголовки */
print ("content-type: text/html; charset = utf-8 n n");
?>
<html>
<голова>
<Title> <? = page_title?> </title>
</head>
<тело>
<h1> <? % "Привет % s!", мир?> </h1>
</body>
</html>
<?
возврат 0;
} // end main ()
?>
Давайте поместим этот фрагмент в файл под названием helloworld.php (почему бы и нет), затем мы выполняем nanabozo как это:
nanabozo helloworld.php helloworld.c
А теперь давайте рассмотрим, как выглядит helloworld.c :
/* * Сгенерировано Нанабозо (не редактируйте) * Sun 14 января 11:08:12 CET 2018 */
Это информационный, самоэкспланирующий комментарий. Вы можете отключить этот заголовок комментариев с помощью Option -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 = "world";
/ * Заголовки */
print ("content-type: text/html; charset = utf-8 n n");
/ * Конец C (строка 8) */
Прилагаемой комментариями «Начало»/«Конец» , здесь приведена первая часть нашего C -кода, как это было в первом файле. Вы можете опустить эти комментарии с помощью опции -n, если хотите, но они полезны для целей отладки.
Ничего особенного здесь, наше CGI нуждается в функции main() . Обратите внимание, что функциональная print используется для отправки обычных обязательных заголовков:
print ("<html> n"
"<head> n"
"<Title>");
Наш HTML -сценарий начинается. Функциональная print используется для передачи его в stdout :
/ * Начало C = (строка 11) */ print (page_title); / * End c = (строка 11) */
C -код, который находился между тегами <?= И ?> Дается как аргумент для print функции.
Еще одна HTML -часть следует:
print ("</title> n"
"</head> n"
"<body> n"
"<h1>");
Затем, что было между тегами <?% И ?> Передается как аргументы для функции printf :
/ * Начните C% (строка 14) */
printf ("hello %s!", World);
/ * Конец C% (строка 14) */
Наконец, остальная часть HTML и конец функции main() :
print ("</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 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 Copyright (c) 2018-2020 Stanislas Marquis <[email protected]> Эта программа - бесплатное программное обеспечение: вы можете перераспределить его и/или изменить в соответствии с условиями общей публичной лицензии GNU, опубликованных Фонд бесплатного программного обеспечения, либо версия 2 лицензии, либо (на вашем варианте) любая более поздняя версия. Эта программа распространяется в надежде, что она будет полезна, но без гарантии; даже без предполагаемой гарантии Торговая способность или пригодность для определенной цели. Увидеть GNU General Public License для получения более подробной информации. Вы должны были получить копию общей публичной лицензии GNU наряду с этой программой. Если нет, см. <Https://www.gnu.org/licenses/>.