E D R , A S I H C RSS

Help On Macros



1. 매크로

매크로는 위키 페이지에 특수한 기능을 집어넣는 확장입니다. 대부분의 위키페이지는 매크로기능을 사용하지 않고 있지만 경우에 따라서 이러한 특수한 기능이 필요할 때가 있습니다. 예를 들어 RecentChanges 페이지에는 RecentChanges매크로를 사용하고 있고, SystemInfo 페이지에는 SystemInfo 매크로를 사용하고 있습니다. 각 페이지를 편집하거나 I를 눌러 이전 정보로부터 페이지 소스를 보시면 매크로를 어떻게 사용하고 있는지를 보실 수 있습니다.

매크로는 [[MacroName]]과 같은 문법을 사용합니다. 매크로에 대한 인자가 필요한 경우가 있는데 각 매크로에 대한 자세한 설명은 해당 페이지에서 확인하실 수 있습니다.

위키 문법이 궁금하시면 HelpOnEditing 페이지를 참조하세요.

2. 매크로 문법

[[MacroName]] 혹은 인자가 필요한 경우에는 [[MacroName(arg1,arg2,arg3...)]]처럼 사용합니다.

매크로의 구현에 따라 인자는 다양한 방식으로 들어갈 수 있습니다.

<!> 모니위키 확장 주의사항
  • 원래 모인모인 문법에서 매크로 이름은 반드시 대문자로 시작하는 이름이어야 했습니다. 모니위키에서는 이러한 제한이 없습니다.
  • 매크로 문법은 [[페이지 이름]]문법과 충돌을 일으킬 수 있습니다. 예를 들어 DateTime 페이지가 있을 때에 [[DateTime]]이라는 식으로 DateTime을 연결할 수 없습니다. 이 경우 2024-03-19 02:59:03이라고 나오게 됩니다. 이런 경우에는 [["DateTime"]]이라고 하면 DateTime이라고 링크가 걸립니다.

  • 모니위키 1.1.5 부터는 매크로에 대한 별명을 지원합니다. [[각주]]라는 식으로 써서 [[FootNote]]의 별명으로 사용하실 수 있습니다.
    이렇게 사용하려면 다음과 같은 설정을 config.php에 넣어주셔야 합니다.

$myplugins=array("각주"=>"FootNote",...); # ...는 생략을 뜻합니다. 다른 내용이 없으면 쓰지 않으셔야 합니다.
  • 이경우 대소문자 구분이 중요한데, 반드시 plugin/파일이름.php에 대응하는 파일이름을 "각주"=>"매크로파일이름"식으로 지정해야 합니다.

2.1. 검색 매크로

매크로설명사용례
[[TitleSearch]] 페이지 제목/별명 찾기 [1] FindPage
[[FullSearch]] 페이지 내용 찾기 FindPage
[[GoTo]] 페이지 바로가기 FindPage
[[PageList(regex)]] 정규식에 해당하는 페이지이름 찾기 HelpIndex

2.2. 네비게이션

매크로설명사용례
[[RecentChanges]] 최근에 변경된 페이지 목록 RecentChanges
[[TitleIndex]] 모든 페이지에 대한 제목 목차 TitleIndex
[[WordIndex]] 페이지 이름으로 구성된 단어 목차 WordIndex
[[RandomPage]] 랜덤페이지 개인키,공개키/김태훈,황재선
[[RandomPage(#)]] 여러개의 랜덤 페이지. 인자는 숫자
[[TableOfContents]] 목차 매크로 현재 보고계신 페이지에서 사용중입니다.

2.3. 시스템 정보

매크로설명사용례
[[InterWiki]] 등록된 터위키 이름 InterWiki
[[SystemInfo]] 현재 위키의 사양 SystemInfo
[[PageCount]] 전체 페이지 개수 7524 페이지
[[PageHits]] 페이지를 본 회수 PageHits

2.4. 기타

매크로설명사용례
[[Icon(image)]] 시스템 아이콘 보여주기 HelpOnNavigation
[[UserPreferences]] 사용자 환경설정 UserPreferences
[[BR]] 강제 줄바꿈 첫번째 줄
다음 줄
[[Include(HelloWorld[,heading[,level]])]] 다른 페이지를 읽어옴
Hello, World! 라는 문자열을 출력하는 프로그램은 대부분의 언어를 배우는 첫걸음이 되어준다.

누가 제일 처음 HelloWorld 를 만들었을까. 어떻게 모든 언어의 입문서에 빠지지 않는 예제가 된것일까.
프로그래밍의 첫걸음으로 HelloWorld를 출력하는 관습은 1978년에 출판된, 브라이언 커니핸과 데니스 리치가 쓴 "The C Programming Language"라는 책에서 비롯되었다.

이미 이 예제가 나올때부터 '프로그래밍이란 현실세계에 대한 가상세계로의 모델링' 이라는 개념을 들고 온 것이 아닐까. 새로운 세상에 대한 노크. 아. 멋지도다;

예전에 CACM 에서는 OO Language (Java 등)에서 C 스타일의 HelloWorld 소스를 예로 드는 점에 관련하여 OO 적이지 못한 예라는 논쟁이 있기도 했다는. ^^

관련 링크

언어별 Hello World 예제

C version

~cpp 
#include <stdio.h>

int main(void)
{
    printf("Hello, World!n");
    return 0;
}

C++ version

~cpp 
#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World" << endl;
    return 0;
}

Python version

~cpp 
print "Hello, World!"

Perl version

~cpp 
#/usr/bin/perl

print "Hello World!n";

Ruby version

puts "Hello World!"

Ruby version (OOP)

class String
    def say
        puts self
    end
end
"Hello, world!".say

Java version

책에 처음 나오는 예제
~cpp 
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
권장 예제
~cpp 
public class HelloWorld{
    public static void main(String[] args){
        Mouth mouth = new Mouth();
        mouth.say("Hello World!");
    }
}
class Mouth{
    public void say(String what){
        System.out.println(what);
    }
}

PHP Web version

~cpp 
<?php 
    echo "<H1>Hello, World!</H1><BR>n"
?>

PHP Web - Template version

~cpp 
<?php
    include_once "class.CHTemplate.inc";
    $tpl = CHTemplate();
    $tpl->load_file("template_hello.tpl");
    $tpl->register("MessageString", "Hello, World!");
    $tpl->pprint();
?>

----
template_hello.tpl

<HTML>
<BODY><TABLE BORDER=1><TR><TD>
<H1> {MessageString} </H1>
</TD></TR></TABLE></BODY>
</HTML>

Windows API version

~cpp 
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
    MessageBox (NULL, "Hello, World!", "Message", MB_OK);
    return 0;
}


Scheme version

~cpp 
(write "Hello World")

C# version

~cpp 
using System;

namespace HelloWorld
{
	class HelloWorld
	{
		static void Main()
		{
			Console.WriteLine("Hello World!");
		}
	}
}

VB.NET version

~cpp 
Module HelloWorld

    Sub Main()
        Console.WriteLine("Hello World!")
    End Sub

End Module

J# version

~cpp 
package HelloWorld;

public class HelloWorld
{
	public static void main()
	{
		System.Console.WriteLine("Hello World!");
	}
}

Managed Extension C++ version

~cpp 
#using <mscorlib.dll>

using namespace System;

int main(void)
{
    Console::WriteLine("Hello World");
    return 0;
}

Ada version

~cpp
with Ada.Text_IO;
Procedure main is
begin
   Ada.Text_IO.Put_Line("Hello World!");
end main;
[[Comment]] 댓글창 [[Comment]]

3. 사용례

각각의 매크로에 대한 예제는 각 매크로 해당 페이지에서 보실 수 있습니다. 간단한 예로 SystemInfo페이지에서 사용하는 [[SystemInfo]]매크로입니다. [[SystemInfo]]를 임의의 페이지에 집어넣으면 다음과 같이 보여집니다:
PHP Version 5.5.x (Linux 5.4.0-1103-aws SMP)
MoniWiki Version Release 1.2.5p2 [Revision: 1.2000 ]
HTTP Server Version Apache/2.4.10
Number of Pages 7524


----
  • [1] 모니위키 1.1.5부터 페이지 별명도 찾아줍니다
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:23
Processing time 0.0444 sec