본문내용
.h 에 정의되어 있는 파일들이다.
/* libformat 라이브러리가 제공하는 랭귀지인지 판별 */
int format_valid_lang(const char *language);
/* 이 함수들을 통해 리턴되는 스트링은 dynamically allocate된 메모리 */
/* 참조이기 때문에 반드시 메모리 free 해 주어야 한다. */
char *format_fd ( int fd, const char *language );
char *format_fp ( FILE *fp, const char *language );
char *format_file ( const char *filename, const char *language );
char *format_string ( const char *str, const char *language );
libformat C library가 제공하는 함수는 이게 전부다. 정말 심플하기 때문에 쉽사리 확장모듈 만들생각이 들었고, 또한 이 문서까지 작성하게 되었다.
각함수들의 두번째 아규먼트인 language는 현재 "c", "c++", "java", "python", "verilog", "vhdl" 만 처리할 수 있다. php는 지원하지 않는다.
PHP에서 fd나 파일포인터를 사용할수 없기 때문에 우리는 아래 두개의 펑션만 구현한다.
이 두개의 구현으로도 충분한 활용이 가능하다.
format_file는 파일명과 언어이름을 입력하면 Highlight Syntax 된 HTML을 리턴하고, format_string는 소스코드를 직접 입력한다.
자 아까 보았던 confirm_libformat_compiled를 응용하여 만들어 보자.
먼저 ext/libformat/libformat.c 의 상단부에 헤더파일 인클루드를 적자.
#include "format.h"
하단부에 아래 코드를 추가하자. PHP확장모듈작성시에 대부분 매크로를 이용하므로 일반적인 C코드와는 좀 달라보인다.
PHP_FUNCTION(format_string)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
// 스트링 방식의 아규먼트 2개를 받는다.
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
// 두번째 파라메터인 language가 지원가능한 언어인지 검사한다.
if(format_valid_lang(language))
{
// libformat C library의 함수를 직접 사용하여 output에 참조시킨다.
output = format_string(str, language);
if(output)
{
// output 리턴후에 반드시 메모리 free를 해주어야 하지만 PHP는 이작업을 대신해준다.
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
PHP_FUNCTION(format_file)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
if(format_valid_lang(language))
{
output = format_file(str, language);
if(output)
{
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
ext/libformat/php_libformat.h를 열어 format_string와 format_file을 선언하자.
PHP_FUNCTION(format_string); /* format_string */
PHP_FUNCTION(format_file); /* format_string */
자 이제 make 하고 테스트 해보자
print format_string("import time","python");
?>
이런식으로 필요한 확장모듈을 만들어 보고, PHP의 구조에 대해 고찰해보자.
확장모듈 구조가 있는 PHP는 정말 못할것이 없어보인다.
특히 php-gtk 는 PHP확장모듈을 이용한 GUI 인터페이스 작성을 가능하게 해준다.
[마치는 글]
이상으로 짧은 글을 마칩니다.
제가 워낙 글실력이 없고, 설명이 부족하여 이해가 잘 안가실줄 믿습니다 ^^;
PHP, Perl, Python같은 대표적인 스크립트 랭귀지는 확장모듈 구조가 거의 비슷합니다.
C/C++로 된 라이브러리를 이런 스크립트 언어의 확장모듈로 쉽게 변환하여 주는 도구도 있습니다.
http://swig.sourceforge.net/
제가 스크립트 언어를 좋아하고 즐겨 쓸 수 밖에 없는 이유중 하나가 이러한 확장성 때문입니다.
일반적으로 프로젝트 개발 속도가 월등히 뛰어난 스크립트 언어들이 이러한 확장성 때문에 더욱 빛을 발휘하게 됩니다.
레드햇의 인스톨러인 아나콘다가 가장 대표적인 예 입니다. 아나콘다가 Python으로 작성되었다는 것은 짚고 넘어가야할 부분입니다.
현재 Perl과 Python에 비하면 PHP의 확장모듈은 아직 많이 부족합니다.
이것은 Perl/Python에 비해 역사도 짧고 확장모듈의 구조가 아직 덜 갖추어져 있기 때문이고, 아직 PHP가 완벽한 객체지향이 아니기 때문에 더 어렵기도 합니다.
PHP5가 나오면 PHP도 Python처럼 다양한 GUI 확장모듈들도 얼마든지 쉽게 만들수 있을 거라 생각됩니다.
PHP로 윈도우프로그래밍도 하고 3D게임도 만들 수 있는 세상이 올거라 기대하며 이만 글을 마칩니다.
박준철, exman@medialand.co.kr, http://www.exman.pe.kr
/* libformat 라이브러리가 제공하는 랭귀지인지 판별 */
int format_valid_lang(const char *language);
/* 이 함수들을 통해 리턴되는 스트링은 dynamically allocate된 메모리 */
/* 참조이기 때문에 반드시 메모리 free 해 주어야 한다. */
char *format_fd ( int fd, const char *language );
char *format_fp ( FILE *fp, const char *language );
char *format_file ( const char *filename, const char *language );
char *format_string ( const char *str, const char *language );
libformat C library가 제공하는 함수는 이게 전부다. 정말 심플하기 때문에 쉽사리 확장모듈 만들생각이 들었고, 또한 이 문서까지 작성하게 되었다.
각함수들의 두번째 아규먼트인 language는 현재 "c", "c++", "java", "python", "verilog", "vhdl" 만 처리할 수 있다. php는 지원하지 않는다.
PHP에서 fd나 파일포인터를 사용할수 없기 때문에 우리는 아래 두개의 펑션만 구현한다.
이 두개의 구현으로도 충분한 활용이 가능하다.
format_file는 파일명과 언어이름을 입력하면 Highlight Syntax 된 HTML을 리턴하고, format_string는 소스코드를 직접 입력한다.
자 아까 보았던 confirm_libformat_compiled를 응용하여 만들어 보자.
먼저 ext/libformat/libformat.c 의 상단부에 헤더파일 인클루드를 적자.
#include "format.h"
하단부에 아래 코드를 추가하자. PHP확장모듈작성시에 대부분 매크로를 이용하므로 일반적인 C코드와는 좀 달라보인다.
PHP_FUNCTION(format_string)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
// 스트링 방식의 아규먼트 2개를 받는다.
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
// 두번째 파라메터인 language가 지원가능한 언어인지 검사한다.
if(format_valid_lang(language))
{
// libformat C library의 함수를 직접 사용하여 output에 참조시킨다.
output = format_string(str, language);
if(output)
{
// output 리턴후에 반드시 메모리 free를 해주어야 하지만 PHP는 이작업을 대신해준다.
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
PHP_FUNCTION(format_file)
{
char *str = NULL;
int str_len;
char *language = NULL;
int language_len;
char *output;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &str, &str_len, &language, &language_len) == FAILURE) {
return;
}
if(format_valid_lang(language))
{
output = format_file(str, language);
if(output)
{
RETURN_STRING(output, 1);
}
return ;
}
else
return;
}
ext/libformat/php_libformat.h를 열어 format_string와 format_file을 선언하자.
PHP_FUNCTION(format_string); /* format_string */
PHP_FUNCTION(format_file); /* format_string */
자 이제 make 하고 테스트 해보자
print format_string("import time","python");
?>
이런식으로 필요한 확장모듈을 만들어 보고, PHP의 구조에 대해 고찰해보자.
확장모듈 구조가 있는 PHP는 정말 못할것이 없어보인다.
특히 php-gtk 는 PHP확장모듈을 이용한 GUI 인터페이스 작성을 가능하게 해준다.
[마치는 글]
이상으로 짧은 글을 마칩니다.
제가 워낙 글실력이 없고, 설명이 부족하여 이해가 잘 안가실줄 믿습니다 ^^;
PHP, Perl, Python같은 대표적인 스크립트 랭귀지는 확장모듈 구조가 거의 비슷합니다.
C/C++로 된 라이브러리를 이런 스크립트 언어의 확장모듈로 쉽게 변환하여 주는 도구도 있습니다.
http://swig.sourceforge.net/
제가 스크립트 언어를 좋아하고 즐겨 쓸 수 밖에 없는 이유중 하나가 이러한 확장성 때문입니다.
일반적으로 프로젝트 개발 속도가 월등히 뛰어난 스크립트 언어들이 이러한 확장성 때문에 더욱 빛을 발휘하게 됩니다.
레드햇의 인스톨러인 아나콘다가 가장 대표적인 예 입니다. 아나콘다가 Python으로 작성되었다는 것은 짚고 넘어가야할 부분입니다.
현재 Perl과 Python에 비하면 PHP의 확장모듈은 아직 많이 부족합니다.
이것은 Perl/Python에 비해 역사도 짧고 확장모듈의 구조가 아직 덜 갖추어져 있기 때문이고, 아직 PHP가 완벽한 객체지향이 아니기 때문에 더 어렵기도 합니다.
PHP5가 나오면 PHP도 Python처럼 다양한 GUI 확장모듈들도 얼마든지 쉽게 만들수 있을 거라 생각됩니다.
PHP로 윈도우프로그래밍도 하고 3D게임도 만들 수 있는 세상이 올거라 기대하며 이만 글을 마칩니다.
박준철, exman@medialand.co.kr, http://www.exman.pe.kr
추천자료
볼링의 역사,경기방식,점수계산,용어등....
포스트텐션 방식, 탑다운 공법 등 이것저것
(생활법률) 청구의 포기에 대한 이해와 법적 효력 및 요건,시기,방식등 전체 정리
장원제에 대하여.. 기원, 구조, 경영방식, 해체원인 등..
기업들의 생산방식(도요타, 현대자동차 등)
이론비평적 방식의 영화평론 기법 (기호학, 정신분석학, 구조주의 등)
지방교육자치 내실화 (교육감 선출 방식 개선 검토 - 지방교육자치법 등)
3)도덕-생김새, 생활 방식 등이 다른 사람을 이해하는 마음 기르기(중안)
3)도덕-생김새, 생활 방식 등이 다른 사람을 이해하는 마음 기르기(중안)
소개글