사용자:Bd3076/기술 스택/1

리버티게임, 모두가 만들어가는 자유로운 게임

의문의 플러그인을 만들며 알게 된 정보들.

플러그인 시스템의 기능[편집 | 원본 편집]

플러그인 시스템은 사용자가 직접 플러그인을 만들고 설치할 수 있게 한다. 물론 그 전에도 플러그인은 있었지만[1] 지금은 훨씬 더 편해졌다. 하지만 플러그인을 다른 곳에 이용한다면 어떨까. 그래서 플러그인 시스템을 분석해 보기로 했다.

먼저 시작은 {{플러그인}} 틀이다. 내부를 들여다 보면

<div style="display:none">
{{#css: {{플러그인/setup/css}} }}
{{#vardefine:defaultdoc| {{NAMESPACE}}:{{ROOTPAGENAME}}/commonjs }}
{{#vardefine:doc| {{#rel2abs: {{{문서| {{{1| {{#var:defaultdoc}} }}} }}} | {{FULLPAGENAME}} }} }}
{{#vardefine:install-type| {{{설치| {{{2| 즉시 }}} }}} }}
</div>{{#ifexist:{{#var:doc}}|
	{{ :{{#var:doc}} | {{#var:doc}} | {{#var:install-type}} | {{rand|1|100000}} }}
| 
	{{알림 상자
		|색=#9900CC
		|테두리색=#000000
		|제목색=#9900CC
		|왼쪽 그림=VisualEditor - Icon - programming-block.svg
		|제목=오잉?? 아직 플러그인 문서가 안만들어졌네요?
		|본문=[{{fullurl: {{#var:doc}} |action=edit&preload=틀:플러그인/preset&summary=새로운플러그인생성}} 자바스크립트 플러그인은 이 문서에서 만들 수 있어요!!]
	}}
}}

이렇게 되어 있다. 밑의 알림 상자는 플러그인 문서가 만들어지지 않았을 때 생성되는 문서이다. 이 부분이 눈에 거슬린다. 하지만 지울 수는 없다. preset을 눈여겨 봐야 한다. preset은 플러그인의 양식과 같기 때문이다.

{{#vardefine:name|플러그인 이름, 영어로}}
{{#vardefine:creat|만든사람}}
{{#vardefine:version|버전명}}
{{#vardefine:descript|플러그인의 용도}}
{{#vardefine:local|플러그인 틀이 붙은 문서에서만 사용하게 하려면 true, 아니면 false}}
{{#vardefine:executable|실행되지 않는 플러그인을 만들고 싶으면 false, 보통의 경우는 true}}

{{#vardefine:code|
<syntaxhighlight lang="javascript">
 // 이부분에 코드 입력 //

 // 여기까지 코드 입력 //
</syntaxhighlight>
}}

!!!!!!!!!!!!!!!! 플러그인 정보 입력 구간 끝 아래는 만지지 마시오!!!!!!!!!!!!!!!!!
</div>{{#switch: {{{1|화면}}}
	|dump = 
	|화면 = 
                {{플러그인/preset/각주}}
		<p<inclu<noinclude></noinclude>deonly></incl<noinclude></noinclude>udeonly>re class="script" data-name="{{#var:name}}" 
		     data-create="{{#var:creat}}" 
		     data-version="{{#var:version}}" 
		     data-descript="{{#var:descript}}" 
		     data-local="{{#var:local}}"
		     data-executable="{{#var:executable}}"
		     data-state="{{풀<noinclude></noinclude>기:FULLPAGENAME}}">
		 {{#var:code}}
		</pre>
	|#default = 
                {{#ifeq:{{{2|틀}}}|틀|{{플러그인/알림|{{#var:name}}}}|}}
		<span class="use-script" data-name="{{#var:name}}" data-creat="{{#var:creat}}" data-version="{{#var:version}}" data-executable="{{#var:executable}}"
		 data-descript="{{#var:descript}}" data-local="{{#var:local}}" data-state="{{풀<noinclude></noinclude>기:FULLPAGENAME}}" data-link="{{fullurl: {{#rel2abs: {{{1}}} }} }}"></span>
}}

밑부분이 상당히 이상하다. 특히 {{플러그인/preset/각주}} 아래의 문장은 대체 저게 문장인가 싶을 정도다. 저게 위키 문법에서 가능한지 의심되지만 어쨌든 가능하니까 저렇게 해도 문제가 없을 것이다. 변수 설정은 그리 어렵지 않으니 생략하고 매개변수를 살펴보자.

첫 번째 매개변수는 화면와 같이 쓰였다. 기본이 화면으로 보인다. 1번 매개변수가 화면이라면,

 {{플러그인/preset/각주}}
		<p<inclu<noinclude></noinclude>deonly></incl<noinclude></noinclude>udeonly>re class="script" data-name="{{#var:name}}" 
		     data-create="{{#var:creat}}" 
		     data-version="{{#var:version}}" 
		     data-descript="{{#var:descript}}" 
		     data-local="{{#var:local}}"
		     data-executable="{{#var:executable}}"
		     data-state="{{풀<noinclude></noinclude>기:FULLPAGENAME}}">
		 {{#var:code}}

이런 게 나오는데, 각주는 설명 문서와 분류 추가를 담당한다. 딱히 살펴볼 건 없으니, 넘어가자.

다음은 바로 저 해괴한 문장인데, 저 부분은 왜 있는 걸까 의심스럽다. 사실상 별 의미도 하지 않으므로, 간략하게 해 보자.

{{플러그인/preset/각주}}
		<pre class="script" data-name="{{#var:name}}" 
		     data-create="{{#var:creat}}" 
		     data-version="{{#var:version}}" 
		     data-descript="{{#var:descript}}" 
		     data-local="{{#var:local}}"
		     data-executable="{{#var:executable}}"
		     data-state="{{풀기:FULLPAGENAME}}">
		 {{#var:code}}

이제 명확해졌다. 이 구간은 플러그인 js 파일의 JSON 정보를 데이터화하는 부분이었던 것이다.

(작성중)

주석[편집 | 원본 편집]

  1. 예를 들어 큐브에 사용되는 cubemapper. 커먼자스에서 찾아볼 수 있으나 지금은 모듈로 변경되었다.