미디어위키:Gadget-CGI2-parser.js

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

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/** [[틀:CGI2]] 변수 구문 해석기
 * 작성자: [[사용자:Gustmd7410]]
**/

module.exports = (function() {
	function CGI2Parser(actions) {
		// new 키워드 미사용시
		if(!(this instanceof CGI2Parser)) {
			console.warn("CGI2Parser 객체를 new 키워드 없이 생성했습니다");
			return new CGI2Parser(actions);
		}
		
		if(typeof actions === "object") this.actions = actions;
		else if(actions === undefined) this.actions = {};
		else throw new TypeError("생성자 CGI2Parser의 첫번째 변수가 객체가 아닙니다");
	}
	CGI2Parser.prototype.parse = function parse(origin, params, useStrict) {
		var actions = this.actions;
		
		JSON.parse(params.replace(/\,\s*\]/, "]")).forEach(function(command) {
			var wrapper = Object.entries(command)[0];
			var action = actions[wrapper[0]];
			var arg = wrapper[1];
			
			if(typeof action === "function") {
				origin = actions[wrapper[0]].apply(origin, Array.isArray(arg)? arg : [arg]) || origin;
			} else if(!useStrict) {
				return;
			} else if(action === undefined) {
				origin = new TypeError('동작 "' + wrapper[0] + '"이(가) 존재하지 않습니다');
				origin.name = "ActionNoExistError";
				throw origin;
			} else {
				origin = new TypeError('동작 "' + wrapper[0] + '"은(는) 유효하지 않는 타입(' + typeof action + ') 입니다');
				origin.name = "ActionWrongTypeError";
				throw origin;
			}
		});
		
		return origin;
	};
	return CGI2Parser;
})();

/* [[틀:CGI2]] 변수 구문 해석기 끝 */