UseModWiki소스수정/Include매크로모듈화 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/Include매크로모듈화 는 읽기 전용 페이지입니다.
== include* 매크로 모듈화 == [[/매크로모듈화]]와 유사하게, 다른 페이지를 include하는 매크로들도 모듈로 추가, 삭제, 수정이 쉽도록 함. * 필수 요구 사항: [[/매크로모듈화]] * 선택 요구 사항: * 사용법: ** [[/매크로모듈화]]와 유사. 새로운 매크로를 만드는 법은 [[UseModWiki매크로]]를 보라. ** mymacros 또는 macros 디렉토리 안에 "매크로이름.pl"로 집어넣을 것. ** 매크로이름은 반드시 '''include라는 문자열을 포함해야 한다''' ** 제일 기본적인 MacroInclude 함수는 그냥 wiki.pl 안에 있다. 따라서 다른 include*** 매크로들은 이 MacroInclude를 최종적으로 부르는 것을 권장함. ** 예: [[/IncludeDay매크로]]의 경우, macros/includeday.pl 이라는 이름으로 저장하고, 그 내용은 다음과 같다. {{{#!vim perl sub includeday { # 매크로이름과 함수이름을 똑같이 my ($txt) = @_; # 여기는 어떤 스트링을 치환할 지 인터페이스를 적어주고, ### includeday 매크로 $txt =~ s/(^|\n)(
)([\r\f]*\n)/$1 . &MacroIncludeDay($2, $3, $4) . $5/geim; ### includedays 매크로 $txt =~ s/(^|\n)(
)([\r\f]*\n)/$1 . &MacroIncludeDay($2, $3, $4, $5) . $6/geim; return $txt; } sub MacroIncludeDay { # 어떻게 치환할지 구체적인 동작을 하는 함수 ... $temp = &MacroInclude($page); # 최종적으로는 MacroInclude 를 불러서 원하는 페이지를 읽어와 합친다. ... return $result; } 1; # 마지막 줄은 항상 이렇게 }}} * 부작용: 없으리라 생각함. ** 주의: [[/매크로모듈화]]에서는 &__LT__;와 &__GT__;가 구분자이지만, include의 경우는 부등호가 치환되기 전에 불리는 것이니 <와 >를 구분자로 해야 한다. (이 페이지에 관심을 가질 만한 사람이라면 무슨 말인지 알 것이다) === wiki.pl 수정 === MacroIncludeSubst()함수를 고친다. {{{#!vim perl sub MacroIncludeSubst { my ($txt) = @_; $txt =~ s/(^|\n)
([\r\f]*\n)/$1 . &MacroInclude($2) . $3/geim; ### toc 를 포함하지 않는 includenotoc 매크로 추가 $txt =~ s/(^|\n)
([\r\f]*\n)/$1 . &MacroInclude($2, "notoc") . $3/geim; ### include 매크로 시리즈 모듈화 my $macroname; my ($MacrosDir, $MyMacrosDir) = ("./macros/", "./mymacros/"); foreach my $dir ($MacrosDir, $MyMacrosDir) { foreach my $macrofile (glob("$dir/*include*.pl")) { if ($macrofile =~ m|$dir/([^/]*).pl|) { $macroname = $1; $MacroFile{"$macroname"} = $macrofile; } } } foreach my $macro (sort keys %MacroFile) { if ($txt =~ /(&__LT__;|<)$macro/i) { require "$MacroFile{$macro}"; $txt = &{\&$macro}($txt); } } return $txt; } }}} 기존에 [[/IncludeDay매크로]]를 담당했던 MacroIncludeDay() 함수는 통채로 삭제해준다. === macros/includeday.pl 추가 === 기존에 [[/IncludeDay매크로]]를 담당했던 부분을 별도의 파일로 옮김. {{{#!vim perl sub includeday { my ($txt) = @_; ### includeday 매크로 $txt =~ s/(^|\n)(
)([\r\f]*\n)/$1 . &MacroIncludeDay($2, $3, $4) . $5/geim; ### includedays 매크로 $txt =~ s/(^|\n)(
)([\r\f]*\n)/$1 . &MacroIncludeDay($2, $3, $4, $5) . $6/geim; return $txt; } sub MacroIncludeDay { my ($itself, $mainpage, $day_offset, $num_days) = @_; my $page = ""; my $temp; my $result = ""; my ($sign, $num); if ($num_days =~ /([-+]?(\d+))/) { $num = $2; $sign = $1 / $num if ($num != 0); } else { $num = -1; } # main page 처리 if ($mainpage ne "") { $temp = $mainpage; $temp =~ s/,$//; $temp = &RemoveLink($temp); $temp = &FreeToNormal($temp); if (&ValidId($temp) ne "") { return $itself; } $temp =~ s/\/.*$//; $mainpage = $temp . "/"; } # 날짜의 변위 계산 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst); my $maximum_count = 100; while (($num != 0) && ($maximum_count > 0)) { $temp = $Now + ($day_offset * 86400); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($temp+$TimeZoneOffset); $page = $mainpage . ($year + 1900) . "-"; if ($mon + 1 < 10) { $page .= "0"; } $page .= ($mon + 1) . "-"; if ($mday < 10) { $page .= "0"; } $page .= "$mday"; $temp = &MacroInclude($page); if ($num == -1) { $result .= $temp; last; } else { if ($temp ne "") { $num--; $result .= $temp . "\n"; } $day_offset += $sign; } $maximum_count--; } return $result; } 1; }}} === 추가 업데이트 내역 === === 사용자 의견 ===
---- [[위키위키분류]]
UseModWiki소스수정/Include매크로모듈화
페이지로 돌아가기 |
다른 수정본 보기