Tags: ,

TODO: Translate to English

Syntax

This page explains the syntax that Uniqki supports in wiki and non-wiki pages.

1   Wiki syntax

Wiki syntax is supported in both wiki and non-wiki pages.

1.1   Headers

Uniqki code
= Page title
The highest level of headers serves as a page title.
== Section 1
Any headers from the second level are added to the table of contents.
==! Sections not visible in the table of contents
Section titles can be removed from the table of contents if an exclamation mark follows section characters.
Uniqki output

Page title

The highest level of headers serves as a page title.

2   Section 1

Any headers from the second level are added to the table of contents.

Sections not visible in the table of contents

Section titles can be removed from the table of contents if an exclamation mark follows section characters.

2.1   Text styles

Uniqki code
//italic// **bold** ''code'' --strikethrough-- __underlined__ !!highlighted!!

//**''--__!!all styles applied!!__--''**//
Uniqki output

italic bold code strikethrough underlined highlighted

all styles applied

2.3   페이지 파일 링크

Uniqki code
{{.}}, {{./}}: 현재 페이지의 디렉토리로 링크를 생성한다.

{{파일}}, {{./파일}}: 현재 페이지의 파일로 링크를 생성한다.

{{페이지/}}: 페이지의 디렉토리로 링크를 생성한다.

{{페이지/파일}}: 페이지에 있는 파일로 링크를 생성한다.

{{페이지/이름에 //}}, {{페이지/이름에 //파일}}: 파일링크시 디렉토리와 파일을 구분짓는 슬래시(/)는 마지막 것으로 간주하고 그 앞의 슬래시들은 페이지이름으로 인코딩된다.

위와 같이 페이지 이름이 슬래시로 끝난다면 슬래시를 두 번 써서 디렉토리를 지정할 수 있다.
또는 /는 어차피 페이지 이름에서 제거되므로 {{페이지/이름에 /}}, {{페이지/이름에 /파일}}로 링크해도 결과는 비슷하다. 단, 출력되는 문자열에 차이가 난다.
Uniqki output

syntax/, syntax/: 현재 페이지의 디렉토리로 링크를 생성한다.

파일, 파일: 현재 페이지의 파일로 링크를 생성한다.

페이지/: 페이지의 디렉토리로 링크를 생성한다.

파일: 페이지에 있는 파일로 링크를 생성한다.

페이지-이름에/, 파일: 파일링크시 디렉토리와 파일을 구분짓는 슬래시(/)는 마지막 것으로 간주하고 그 앞의 슬래시들은 페이지이름으로 인코딩된다.

위와 같이 페이지 이름이 슬래시로 끝난다면 슬래시를 두 번 써서 디렉토리를 지정할 수 있다. 또는 /는 어차피 페이지 이름에서 제거되므로 페이지-이름에/, 파일로 링크해도 결과는 비슷하다. 단, 출력되는 문자열에 차이가 난다.

2.4   외부 링크

Uniqki code
<<http://uniqki.isnew.info|Uniqki>>: URL로 링크를 생성한다.

[[http://uniqki.isnew.info]]: URL을 페이지 이름으로 입력한다.
Uniqki output

Uniqki: URL로 링크를 생성한다.

http://uniqki.isnew.info: URL을 페이지 이름으로 입력한다.

2.5   이미지 링크

Uniqki code
{{{페이지/이미지}}}, {{{페이지/이미지}}}[width:100px; display:block; margin:0 auto;]

<<<https://idea.isnew.info/logo.png>>>, <<<https://idea.isnew.info/logo.png>>>[width:100px; display:block; margin:0 auto;]

{{페이지/이미지}}와 <<https://idea.isnew.info/logo.png>>는 이미지 파일로 링크를 생성하지만 {와 <를 세 개 써서 이미지를 보여 줄 수 있다. 태그를 닫은 후 [] 안에 이미지의 CSS 스타일을 지정할 수도 있다.
Uniqki output

,

https://idea.isnew.info/logo.png, https://idea.isnew.info/logo.png

이미지https://idea.isnew.info/logo.png는 이미지 파일로 링크를 생성하지만 {와 <를 세 개 써서 이미지를 보여 줄 수 있다. 태그를 닫은 후 [] 안에 이미지의 CSS 스타일을 지정할 수도 있다.

2.6   인용

Uniqki code
인용을 시작해 보자.
> 인용할 문장을 "> "로 시작한다.
  여러 줄에 걸쳐서 인용이 가능하다.
  .
  문단 나누기도 가능하다.
  > 인용문 안에
    인용문을 넣어 보자. 다음과 같이 둥근 괄호로 시작하고 끝나는 줄은 모두 합쳐져서 인용문 닫기 바로 전에 하나의 출처로 footer 태그 안에 출력된다.
    (--)
    (이사람)
    (저사람)
  바로 위의 인용문을 닫고
  원래의 인용문으로 돌아왔다.
  (-- 저자)

연속된 인용문들은 중첩되고 출처가 해당 인용문을 닫기 바로 전에 출력되기 때문에 다음과 같이 토론을 하면 원치 않는 결과가 나온다.
> (유저 1)
  (<http://example.com/user1>)
  나는 이렇게 생각한다.
  > (유저 2)
    (<http://example.com/user2>)
    나는 반대한다.

인라인 cite를 이용해서 다음과 같이 작성할 수 있다.
> 토론을 위해서는 둥근 괄호에 둘러 싸인 인라인 cite로 끝내면 된다. (유저 1 <http://example.com/user1>)
  > 그러면 글 중에 ''''()가 있으면 어떻게 하나? (방문자)
    > 괄호 앞에 공백이 있어야 하므로 파싱 후 제거되는 빈 폰트명령인 "".''''.""를 괄호 앞에 더하면 된다. 긴 글이 인용문에 중첩되면 점점 좁아지는 단점이 있다. (유저 1 <http://example.com/user1>)
Uniqki output

인용을 시작해 보자.

인용할 문장을 “> ”로 시작한다. 여러 줄에 걸쳐서 인용이 가능하다.

문단 나누기도 가능하다.

인용문 안에 인용문을 넣어 보자. 다음과 같이 둥근 괄호로 시작하고 끝나는 줄은 모두 합쳐져서 인용문 닫기 바로 전에 하나의 출처로 footer 태그 안에 출력된다.

– 이사람 저사람

바로 위의 인용문을 닫고 원래의 인용문으로 돌아왔다.

-- 저자

연속된 인용문들은 중첩되고 출처가 해당 인용문을 닫기 바로 전에 출력되기 때문에 다음과 같이 토론을 하면 원치 않는 결과가 나온다.

나는 이렇게 생각한다.

나는 반대한다.

인라인 cite를 이용해서 다음과 같이 작성할 수 있다.

토론을 위해서는 둥근 괄호에 둘러 싸인 인라인 cite로 끝내면 된다. 유저 1 <http://example.com/user1>

그러면 글 중에 ()가 있으면 어떻게 하나? 방문자

괄호 앞에 공백이 있어야 하므로 파싱 후 제거되는 빈 폰트명령인 ''''를 괄호 앞에 더하면 된다. 긴 글이 인용문에 중첩되면 점점 좁아지는 단점이 있다. 유저 1 <http://example.com/user1>

2.7   리스트

Uniqki code
* 총알 리스트 1
  * 총알 리스트 1-1
    * 총알 리스트 1-1-1
  * 총알 리스트 1-2
* 총알 리스트 2:
  내용 계속
  .
  리스트 안에 문단
  .
  계속
  + 숫자 리스트로 바꾸기
  + 숫자 리스트
    - 거꾸로 숫자 리스트
    - 거꾸로 숫자 리스트

: 단어 1: 정의 1
  : 단어 2: 정의 2

>를 이용해서 토론을 하다 보면 댓글이 중첩된 인용문으로 처리되어서 점점 좁아지는 문제점이 있다. 다음과 같이 리스트를 써서 해결할 수 있다.
: : 토론을 위해서는 단어정의 리스트를 이용해서 공백의 단어를 정의하는 식으로 댓글을 이어 갈 수 있다. -- //유저 1 <http://example.com/user1>//
  : : 그러면 시작할 때마다 '': : ''를 입력하는 것이 귀찮지 않겠나? -- //방문자//
    : : 다음에 소개할 ''#regex'' 명령으로 입력을 쉽게 할 수 있다. 뿐만 아니라 긴 글이 리스트에 댓글로 달려도 인용문과는 달리 점점 좁아지는 단점이 없다. -- //유저 1 <http://example.com/user1>//
      : : 서명은 수동으로 할 수 밖에 없네? -- //방문자//
        : : 이 역시 ''#regex'' 명령으로 쉽게 처리할 수 있다.

#regex #^((?:  )*)< (.*?)(?: (-- .*))?$#\1: : \<span style="color:red;"\>\&\#x21AA;\</span\> \2 \<i\>\3\</i\>#
< 토론을 위해서는 단어정의 리스트를 이용해서 공백의 단어를 정의하는 식으로 댓글을 이어 갈 수 있다. -- 유저 1 <http://example.com/user1>
  < 그러면 시작할 때마다 '': : ''를 입력하는 것이 귀찮지 않겠나? -- 방문자
    < 여기서 소개할 ''#regex'' 명령으로 입력을 쉽게 할 수 있다. 뿐만 아니라 긴 글이 리스트에 댓글로 달려도 인용문과는 달리 점점 좁아지는 단점이 없다. -- 유저 1 <http://example.com/user1>
      < 서명은 수동으로 할 수 밖에 없네? -- 방문자
        < 이 역시 ''#regex'' 명령으로 쉽게 처리할 수 있다.
Uniqki output
  • 총알 리스트 1
    • 총알 리스트 1-1
      • 총알 리스트 1-1-1
    • 총알 리스트 1-2
  • 총알 리스트 2: 내용 계속

    리스트 안에 문단

    계속

    1. 숫자 리스트로 바꾸기
    2. 숫자 리스트
      1. 거꾸로 숫자 리스트
      2. 거꾸로 숫자 리스트
단어 1
정의 1
단어 2
정의 2

>를 이용해서 토론을 하다 보면 댓글이 중첩된 인용문으로 처리되어서 점점 좁아지는 문제점이 있다. 다음과 같이 리스트를 써서 해결할 수 있다.

토론을 위해서는 단어정의 리스트를 이용해서 공백의 단어를 정의하는 식으로 댓글을 이어 갈 수 있다. – 유저 1 <http://example.com/user1>
그러면 시작할 때마다 : : 를 입력하는 것이 귀찮지 않겠나? – 방문자
다음에 소개할 #regex 명령으로 입력을 쉽게 할 수 있다. 뿐만 아니라 긴 글이 리스트에 댓글로 달려도 인용문과는 달리 점점 좁아지는 단점이 없다. – 유저 1 <http://example.com/user1>
서명은 수동으로 할 수 밖에 없네? – 방문자
이 역시 #regex 명령으로 쉽게 처리할 수 있다.
토론을 위해서는 단어정의 리스트를 이용해서 공백의 단어를 정의하는 식으로 댓글을 이어 갈 수 있다. – 유저 1 <http://example.com/user1>
그러면 시작할 때마다 : : 를 입력하는 것이 귀찮지 않겠나? – 방문자
여기서 소개할 #regex 명령으로 입력을 쉽게 할 수 있다. 뿐만 아니라 긴 글이 리스트에 댓글로 달려도 인용문과는 달리 점점 좁아지는 단점이 없다. – 유저 1 <http://example.com/user1>
서명은 수동으로 할 수 밖에 없네? – 방문자
이 역시 #regex 명령으로 쉽게 처리할 수 있다.

2.8   테이블

테이블 문법은 도쿠위키를 참조했다. 기본적으로 구분자 앞뒤로 공백이 하나 이상 있어야 한다. 단, 시작하고 끝나는 구분자에는 각각 앞과 뒤에 공백이 있으면 안 된다.

  • <caption>: !로 시작해서 !로 끝난다.
  • <thead>: 각 열을 ^로 마친다.
  • <tfoot>: 각 열을 !로 마친다. !는 셀을 시작하는 구분자가 아니고 열을 마칠 때 <tfoot> 태그임을 알려 주는 역할만 한다. 따라서 다른 곳에는 쓸 수 없다.
  • <tbody>: 각 열을 |로 마친다. 여러 개의 <tbody>를 생성하기 위해서는 마지막 |뒤에 _를 입력해서 다음 <tbody>를 시작한다.
  • <th>: 각 셀을 ^로 시작한다.
  • <td>: 각 셀을 |로 시작한다.
  • 열 병합: 닫는 구분자를 연속으로 쓴다.
  • 행 병합: 병합될 셀에 .을 입력한다.
  • 왼쪽 정렬: 시작하는 구분자와 내용 사이에 공백을 하나만 입력한다.
  • 오른쪽 정렬: 닫는 구분자와 내용 사이에 공백을 하나만 입력한다. 단, 시작하는 구분자와 내용 사이에 공백이 하나만 있을 경우 왼쪽으로 정렬된다.
  • 가운데 정렬: 시작하는 구분자와 닫는 구분자로부터 공백을 두 개 이상씩 입력한다.
Uniqki code
! 테이블 캡션을 옵션으로 붙일 수 있다. !
^ 요약   | <table> 안의 <caption>, <thead>, <tbody>, <tfoot>, <tr>, <th>, <td> 태그들을 지원한다. !!
^ 헤딩 1 ^ 헤딩 2 ^ 헤딩 3                   ^
^ 헤딩 4 |               열 병합 오른쪽 정렬 ||
! 헤딩 4는 열 병합과 오른쪽 정렬을 보여준다. !
^ 헤딩 5 |  행 병합    |  행 병합 가운데 정렬  |
^ 헤딩 6 | .          | .                  |
^ 헤딩 7 | .          | |가 셀을 시작하거나 닫지 못 하게 바로 뒤에 공백을 없애서 |로 입력 |_
^ 헤딩 8 | 두 번째 <tbody>는 바로 윗행의 마지막에 _를 입력해서 시작한다. ||
Uniqki output
Table 1: 테이블 캡션을 옵션으로 붙일 수 있다. 헤딩 4는 열 병합과 오른쪽 정렬을 보여준다.
헤딩 1헤딩 2헤딩 3
헤딩 4열 병합 오른쪽 정렬
헤딩 5행 병합행 병합 가운데 정렬
헤딩 6
헤딩 7|가 셀을 시작하거나 닫지 못 하게 바로 뒤에 공백을 없애서 |로 입력
헤딩 8두 번째 <tbody>는 바로 윗행의 마지막에 _를 입력해서 시작한다.
요약<table> 안의 <caption>, <thead>, <tbody>, <tfoot>, <tr>, <th>, <td> 태그들을 지원한다.

2.9   그림

Uniqki code
@ <<<https://idea.isnew.info/logo.png>>> @
" Idea.IsNew.Info 로고 "

" Idea.IsNew.Info 로고 "
" 캡션을 계속 추가 "
@ <<<https://idea.isnew.info/logo.png>>>[padding:0 100px] @

" Hello World C 코드 "
@ (
---[c]
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    printf("Hello World!\n");
    exit(EXIT_SUCCESS);
}
---
) @
Uniqki output
https://idea.isnew.info/logo.png
Figure 1: Idea.IsNew.Info 로고
https://idea.isnew.info/logo.png
Figure 2: Idea.IsNew.Info 로고 캡션을 계속 추가
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    printf("Hello World!\n");
    exit(EXIT_SUCCESS);
}
Figure 3: Hello World C 코드

2.10   문법 네스팅

Uniqki code
* 리스트 안에(
| 테이블 넣기 | (_
| 그 안에 | 또 |
| 테이블 | (__
* 리스트 1
* 리스트 2
---
그대로
입력
---
___
)__ |
)_ |
| 이렇게     | 입력한다. |
) 리스트 계속
* 리스트 2

인용문에 표를 추가하기.
> 다음 표를 보세요. (
| 인용문 | 안에 |
| 테이블 | 넣기 |
) 아하!
  (출처)
Uniqki output
  • 리스트 안에
    테이블 넣기
    그 안에
    테이블
    • 리스트 1
    • 리스트 2
    그대로
    입력

    이렇게입력한다.
    리스트 계속
  • 리스트 2

인용문에 표를 추가하기.

다음 표를 보세요.

인용문안에
테이블넣기
아하!

출처

2.11   입력한 그대로 출력

입력한 그대로 출력하는 방법에는 블록과 인라인 두 가지가 있다.

블록의 경우 하이픈(-)을 세 번 이상 한 줄에 입력해서 시작하고 같은 수의 하이픈을 이용해서 마친다. 블록 내용 중에 하이픈이 세 번 이상 있는 줄이 있으면 그 개수를 달리 해서 입력하면 된다.

Uniqki code
----
블록의 경우 여러 줄에
걸쳐서 입력이 가능하다.
---
-의 개수가 다르면 닫지 않는다.
----
Uniqki output
블록의 경우 여러 줄에
걸쳐서 입력이 가능하다.
---
-의 개수가 다르면 닫지 않는다.

인라인의 경우 큰 따옴표(")를 두 번 입력하고 바로 다음 구분자로 쓸 문자를 입력한다. 원하는 내용을 입력한 다음 구분자와 큰 따옴표 두 번으로 마친다.

Uniqki code
""|인라인 방법은
여러 줄에 걸쳐서는 작동하지 않는다.|""

"".//입력한// **그대로** 출력.""하는 방법을 보여 준다. ""|cos(3.14)=``sprintf "%.2f", cos(3.14)``|""

//입력한// **그대로** 출력하는 방법과 비교해 보자. cos(3.14)=``sprintf "%.2f", cos(3.14)``

''""|//이 문장//의 경우 구분자인 |이 중간에 들어가도 바로 뒤에 ""가 따라 오지 않기 때문에 //계속// 입력이 가능하다.|""''
Uniqki output

""|인라인 방법은 여러 줄에 걸쳐서는 작동하지 않는다.|""

//입력한// **그대로** 출력하는 방법을 보여 준다. cos(3.14)=``sprintf "%.2f", cos(3.14)``

입력한 그대로 출력하는 방법과 비교해 보자. cos(3.14)=-1.00

//이 문장//의 경우 구분자인 |이 중간에 들어가도 바로 뒤에 ""가 따라 오지 않기 때문에 //계속// 입력이 가능하다.

3   Non-wiki syntax

Non-wiki syntax is supported only in non-wiki pages, aka admin-only pages.

3.1   Perl code embedding

Uniqki code
Embed Perl code by wrapping it with double backticks in a non-wiki page.
The cosine of 3.14 equals to ``sprintf "%.2f", cos(3.14)``.
Uniqki output

Embed Perl code by wrapping it with double backticks in a non-wiki page. The cosine of 3.14 equals to -1.00.

3.2   MathJax and the Math::Trig Perl module

Adding the following line inside the <head> tag in the header.tpl file allows TeX syntax in wiki pages.

<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_CHTML"></script>

Using the Math::Trig Perl module along with MathJax, one can do trigonometric calculations in a non-wiki page as follows:

Uniqki code
##{use Math::Trig; use vars qw($conv); sub radians{$conv=1;} sub degrees{$conv=pi/180;} radians}
#regex /:(sin|cos|tan)\((.*?)\)/``sprintf "%.3f", \1($conv*(\2))``/

$$\sin(\pi/2)=:sin(pi/2)$$
##{degrees}
$$\sin(90^\circ)=:sin(90)$$
$$\tan(45^\circ)=:tan(45)$$
##{radians}
$$\tan(\pi/4)=:tan(pi/4)$$
Uniqki output

$$\sin(\pi/2)=1.000$$ $$\sin(90^\circ)=1.000$$ $$\tan(45^\circ)=1.000$$ $$\tan(\pi/4)=1.000$$