본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 44. Perltip - pod2html 사용법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.

Perltip - pod2html 사용법

Description

펄 패키지 내에 포함된 pod2html 사용법에 관해서 다루었습니다. 펄 문서를 보게되면 지금 보시는것과 같은 폼으로 되어 있는데, 이는 pod2html을 이용하여 쉽게 포맷할 수 있습니다. 지금부터 pod파일에서 html로 문서를 변형시켜주는 pod2html에 대해서 말씀드리겠습니다. (참고 : ActivePerl 을 기준으로 하였습니다)


POD란?

POD(plain old documentation - 모라고 해석을 해야 될지.... ^^;) 파일은 일종의 예약어로 구성되어 있습니다.

 흔히 html 문서를 만들 때 <...>... 이런 식의 태그를 이용해서 만들게 되어 있죠. 이와 같이 pod 문서 또한 '=예약어'로 이루어져 있습니다. 또한 Html.pm 모듈을 이용해서 이 예약어를 해석하고, Html 형식으로 돌려주게 되어 있습니다. 펄 패키지가 설치된 곳에서 확장자가 pod로 끝나는 문서를 쉽게 찾으실 수 있습니다. 에디터를 이용해서 이 문서를 열어보면,

=head1
=over 4
=item
				

등의 예약어를 보실 수 있습니다. 그러면 콘솔상에서

pod2html ****.pod

라고 쳐보세요. Html 문서가 화면에 뿌려질 겁니다.

 이것을 이용해서 문서를 작성하게 되면, 펄 문서, 또는 이곳에서 보시는 형태의 문서를 만드실수 있습니다. 인덱스도 만들어 주고, 문서 내의 하이퍼링크, 스타일 시트를 이용한다면, 보기 편한 문서를 만드실 수 있습니다. 그럼 이 예약어가 어떻게 쓰이고, 또한 Html 문서로 변형되었을 때 어떻게 되는지 살펴보겠습니다.


Command Paragraph

 이 예약어들은 그리 많치 않습니다. 하나씩 살펴보겠습니다. 먼저.. 이 예약어를 사용하실때는 앞에 '=' 가 붙고, '='와 예약어 사이에는 공백이 오면 안됩니다. 예약어는 칸을 띄우지 않고, 그러니깐, 줄의 맨처음에 선언되야 합니다. 그리고 예약어와 내용 사이에는 한 줄을 띄우셔야 합니다. 또 내용을 눈으로 보시면 이해가 잘 안되실 겁니다. 직접 해 보시면 금방 알 수 있습니다.

pod, cut

=pod
	문서 내용
=cut

					

 위 두 예약어는 펄 모듈내에서 쉽게 보실수 있는데, 이는 pod, cut 사이의 글은 (프로그램 내에서) 주석으로 처리되게 됩니다. 물론... 모듈 내가 아니라, 저처럼.... 처음부터 Html 문서를 만드시고자 하신다면 위의 내용은 선언하지 않아도 됩니다.

head(n)

=head1
=head2
=head3
.....
					

 head 숫자는 '제일 큰 주제', '그 밑의 그 다음 주제', '그 다음 주제'.... 등으로 나가게 됩니다. HTML 내에서 <H1><H2><H3>... 에 해당합니다. 이는 또한 인덱스의 순서로도 결정이 되게 됩니다.

 head로 쓰인 곳은 name 태그를 결정하게 되는데(인덱스와 본문을 연결하게 됩니다), 이때 한글은 인식이 되지 않더군요.... 또한 =head NAME으로 하셨을 때만(맨 처음에 선언), 이 다음에 오는 내용을 HTML 문서의 title로 만들게 됩니다.

over, item, back

= over 4
= item 1. test
	내용
= item 2. test pod
	내용
= back
	내용
					

 over, item, back 은 HTML내에서 <ul> <li> </ul> 의 역할을 합니다.

for

= for html <br>
<img src=....>
					

 for 예약어는 html 태그를 쓸 수 있게 해줍니다. 그렇지 않고 태그를 그냥 쓰게 되면, 화면에 태그 내용이 그대로 나옵니다. 그림 등 특정하게 태그를 사용할 시는 이를 사용합니다.

B

B>내용>

 이는 < 와 > 안의 내용을 bold 체로 하여 줍니다. 처음에 선언하는 예약어와는 달리, 문서의 중간에 삽입하시면 됩니다.

C

=head1 List
C<link>
=over 8
=item link
=back
					

 위 처럼 하게 되면 'link'에 대한 name 태그를 설정해 줍니다. 이 곳의 함수 설명을 보시면, 이를 이용하여 작성하였습니다.

공백(blank)

 어떤 예약어든지 B, C.. 등을 제외하고는 첫 줄에 공백이 들어가면 안됩니다. 예약어와 문장 사이에 한 칸을 띄우게 되는데, 이때 띄어져 있는 줄에도 공백이 들어가면 안됩니다. 이는, 프로그램이 공백으로 시작한 내용은 <pre></pre> 태그로 감싸기 때문입니다. 소스를 적는다던가 할 때는 앞에 공백을 주고, 쓰시면 됩니다.


POD에서 HTML 로...

 위의 내용을 이용해서 문서를 작성하셨다면, 이제 HTML로 바꾸셔야죠. 근데.. 그냥 pod2html text.pod 하시게 되면, 그냥 화면에 출력이 됩니다.

pod2html test.pod > test.html

 이렇게, '>' 를 이용해서 그 내용을 화면이 아닌 test.html 로 넣으라고 명령을 내려주시면 됩니다. 수정이 되더라도 똑깥이 해주시면 되요. 그냥 덮어쓰니깐.....


HTML.pm

 pod2html은 HTML.pm 모듈을 이용하는데, 문서의 모냥이나 - 스타일 시트를 정의하거나, 마지막 줄에 글쓴이의 정보를 넣는다거나 - 색상을 우리의 입맛에 맞게 하기 위해선 이 HTML.pm 모듈을 조금 수정하시면 됩니다. 그렇다고 소스 여기저기 돌아다니면서 수정하는 건 아니구요, 머리부분과 꼬리부분의 수정에 대해서만 살펴볼게요.

 HTML.pm 모듈 내에 pod2html() 함수가 있습니다. 여기에서,

print HTML << END_OF_HEAD;
	<HTML>
	<HEAD>
	<TITLE>$title</TITLE>
	<LINK REV="made" HREF="mailto:$Config{perladmin}">
	</HEAD>
	<BODY>
	<!-- beginning of leaf header-->
		<TABLE border=0  cellpadding=0 cellspacing=0 width=100%>
		<TR>
			<TD valign=middle width="100%" bgcolor="#cc0066"><font face="sans-serif" size="+1" color="#ff99cc">   $title</font></TD>
		</TR>
        </TABLE>
		<p> </p>
	<!-- end of leaf content-->
END_OF_HEAD
				

이런 부분이 있는데, 이곳이 HTML 문서를 만들 때 머리부분에 해당합니다. 자바스크립트나 스타일시트등, 미리 선언할 내용이 있다면, 이곳에 넣어 주시면 됩니다.

 또,

print HTML << END_OF_TAIL;
	</BODY>
	</HTML>
END_OF_TAIL
				

 이런 부분이 있는데, 이곳이 HTML 문서의 마지막 부분이 됩니다.

 그리고 또 한 가지.... 패키지 내에 찾기를 해서 보시면, win32prk.css라는 스타일 시트를 정의해 놓은 파일이 있습니다. 펄의 문서를 보시면, 글자체도 그렇고, 색깔도 그렇고 이뿌거든요. 근데 제가 그냥 만들면 글자가 모두 검어요... ^^; 알고보니... 위의 스타일 시트 파일이 있더군요. 위의 머리부분을 생성하는 부분에 스타일시트 파일을 정의해 놓으면, 문서 모냥이 이뻐집니다. 물론 본인이 원하는 색상과 크기로 바꾸시면 되구요.


NOTES

 pod2html이라는 것에 대해서 이야기하였습니다. 뭐... 제 홈에서야 모두 이 문서로 해서 자주 쓰지만, 여러분들은 어떨런지 모르겠네요. 하지만, 어떤 문서를 정리해서 홈에 올린다거나, 보여준다거나 할 때, 이를 이용한다면 격식이 있는, 그러면서 보기 편한 문서를 만들 수 있으실 겁니다.


이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo