head	1.11;
access;
symbols;
locks
	root:1.11; strict;
comment	@# @;


1.11
date	2009.12.18.11.26.54;	author root;	state Exp;
branches;
next	1.10;

1.10
date	2009.12.18.11.25.05;	author root;	state Exp;
branches;
next	1.9;

1.9
date	2009.12.18.09.47.19;	author root;	state Exp;
branches;
next	1.8;

1.8
date	2009.12.18.09.41.43;	author root;	state Exp;
branches;
next	1.7;

1.7
date	2009.12.18.09.34.19;	author root;	state Exp;
branches;
next	1.6;

1.6
date	2009.12.18.09.29.08;	author root;	state Exp;
branches;
next	1.5;

1.5
date	2009.12.18.09.28.41;	author root;	state Exp;
branches;
next	1.4;

1.4
date	2009.12.18.09.27.12;	author root;	state Exp;
branches;
next	1.3;

1.3
date	2009.12.15.04.08.15;	author root;	state Exp;
branches;
next	1.2;

1.2
date	2009.12.15.03.51.02;	author root;	state Exp;
branches;
next	1.1;

1.1
date	2009.12.15.03.50.51;	author root;	state Exp;
branches;
next	;


desc
@/opt/nforge/var/wiki/ase/data/text/QSESED
@


1.11
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@== QSESED ==

QSESED는 기존 SED스트림편집기가 제공하는 대부분의 명령어들을 지원하는 임베딩용 스트림편집기이며 [wiki:FrontPage QSE]라이브러리의 일부입니다. QSESED를 임베딩하려면 일반적으로 다음의 과정들을 따릅니다.

 * 스트림에디터 열기
 * 명령어 컴파일하기
 * 명령어 실행하기
 * 스트림에디터 닫기 

명령어를 실행하기 위해서는 텍스트를 읽어들이고, 명령어들을 적용한 후, 결과를 출력할 스트림이 필요합니다. C에서는 콜백함수로, C++에서는 IOStream클래스로 추상화되어 있습니다.  

아래의 코드는 C++용 API를 사용하여 간단한 명령형 스트림편집기를 만드는 방법을 보여줍니다.
{{{
#include <qse/sed/StdSed.hpp>
#include <qse/cmn/main.h>
#include <iostream>

#ifdef QSE_CHAR_IS_MCHAR
#	define xcout std::cout
#else
#	define xcout std::wcout
#endif

int sed_main (int argc, qse_char_t* argv[])
{
	if (argc <  2 || argc > 4)
	{
		xcout << QSE_T("USAGE: ") << argv[0]
		      << QSE_T(" command-string [input-file [output-file]]") 
		      << std::endl;
		return -1;
	}

	QSE::StdSed sed;

	// 스트림편집기를 열어서 초기화 합니다.
	if (sed.open () == -1)
	{
		// 열기에 실패한 경우에는 getErrorMessage()를 사용할 수 없으므로
		// 그냥 열수 없다는 메시지만 출력합니다.
		xcout << QSE_T("ERR: cannot open") << std::endl;
		return -1;
	}

	// 두번째 인자에 지정된 명령어들을 컴파일합니다.
	if (sed.compile (argv[1]) == -1)
	{
		xcout << QSE_T("ERR: cannot compile - ") 
		      << sed.getErrorMessage() << std::endl;
		sed.close ();
		return -1;
	}

	// 데이터를 읽고 쓸 스트림을 만듭니다.
	qse_char_t* infile = (argc >= 3)? argv[2]: QSE_NULL;
	qse_char_t* outfile = (argc >= 4)? argv[3]: QSE_NULL;
	QSE::StdSed::StdStream stream (infile, outfile);

	// 위에서 만든 스트림상에서 명령어들을 실행합니다.
	if (sed.execute (stream) == -1)
	{
		xcout << QSE_T("ERR: cannot execute - ") 
		      << sed.getErrorMessage() << std::endl;
		sed.close ();
		return -1;
	}
	
	// 스트림편집기를 닫습니다.
	sed.close ();
	return 0;
}

int qse_main (int argc, qse_achar_t* argv[])
{
	return qse_runmain (argc, argv, sed_main);
}
}}}
@


1.10
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d39 2
@


1.9
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d39 1
a39 2
		xcout << QSE_T("ERR: cannot open - ") << sed.getErrorMessage()
		      << std::endl;
@


1.8
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d3 1
a3 1
QSESED는 기존 SED스트림편집기가 제공하는 대부분의 명령어들을 지원하는 임베딩용 스트림편집기이며 QSE라이브러리의 일부입니다. QSESED를 임베딩하려면 일반적으로 다음의 과정들을 따릅니다.
@


1.7
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d3 1
a3 1
SED스트림편집기는 유닉스환경에서 자주 사용하는 비대화형 편집도구입니다. 입력스트림에서 읽어 들인 텍스트를 패턴공간에 저장하고, 편집명령어들을 거기에 적용한 후, 그 결과를 출력스트림으로 보냅니다. 입출력스트림은 일반적으로 콘솔이나 파일입니다.
d5 4
a8 1
QSESED는 기존 SED스트림편집기들이 제공하는 대부분의 명령어들을 지원하며 입출력스트림을 콜백함수로 구현하는 임베딩용 스트림편집기입니다. 
d10 3
a12 1
아래의 코드는 C++용 API를 사용하여 간단한 명령형 스트림에디터를 만드는 방법을 보여줍니다.
d36 1
a36 1
	// 스트림에디터를 열어서 초기화 합니다.
d67 1
a67 1
	// 스트림에디터를 닫아서 제거합니다.
@


1.6
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d7 1
d31 1
d39 1
d48 1
d53 1
d61 2
a62 1

@


1.5
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d32 1
a32 1
		xcout << QSE_T("ERR: cannot open - ") << sed.getErrorMessage() 
@


1.4
log
@221.157.134.6;;bacon 정형환 ;;
@
text
@d22 3
a24 2
		xcout << QSE_T("USAGE: ") << argv[0] <<
		         QSE_T(" command-string [input-file [output-file]]") << std::endl;
d32 2
a33 1
		xcout << QSE_T("ERR: cannot open - ") << sed.getErrorMessage() << std::endl;
d39 2
a40 1
		xcout << QSE_T("ERR: cannot compile - ") << sed.getErrorMessage() << std::endl;
d51 2
a52 1
		xcout << QSE_T("ERR: cannot execute - ") << sed.getErrorMessage() << std::endl;
@


1.3
log
@221.157.134.6;;bacon Hyung-Hwan Chung;;
@
text
@d13 1
a13 1
#       define xcout std::cout
d15 1
a15 1
#       define xcout std::wcout
a17 6
#define FAIL(sed) do { \
        xcout << QSE_T("ERR: ") << sed.getErrorMessage() << std::endl; \
        sed.close (); \
        return -1; \
} while (0)

d20 32
a51 13
        if (argc !=  3)
        {
                xcout << QSE_T("Usage: ") << argv[0] <<  QSE_T(" command-string\n input-file") << std::endl;
                return -1;
        }

        QSE::StdSed sed;

        if (sed.open () <= -1) FAIL (sed);
        if (sed.compile (argv[1]) <= -1) FAIL (sed);

        QSE::StdAwk::File infile (argv[2]);
        if (sed.execute (infile) <= -1) FAIL (sed);
d53 2
a54 2
        sed.close ();
        return 0;
d57 1
a57 1
int qse_main (int argc, char* argv[])
d59 1
a59 1
        return qse_runmain (argc, argv, sed_main);
@


1.2
log
@221.157.134.6;;bacon Hyung-Hwan Chung;;
@
text
@d5 44
a48 1
[wiki:FrontPage QSE]는 기존 SED스트림편집기들이 제공하는 대부분의 명령어들을 지원하며, 입출력스트림을 콜백함수로 구현하는 임베딩용 스트림편집기입니다.
@


1.1
log
@221.157.134.6;;bacon Hyung-Hwan Chung;;
@
text
@d5 1
a5 1
[wiki::FrontPage QSE]는 기존 SED스트림편집기들이 제공하는 대부분의 명령어들을 지원하며, 입출력스트림을 콜백함수로 구현하는 임베딩용 스트림편집기입니다.
@
