// v1.4.0 /////////////////////////////////////////////////////////////////////////////////////////
// 2005-07-30

# 안전모드 추가
- 제어문, 변수, 함수의 사용을 제한할 수 있는 기능
- SkyTpl/setup.ini.SafeMode.php 파일에서 지정
- allow, deny 리스트를 조합하여 사용한다. (allow 우선)

# 블럭 모으기 기능 추가
- ^, COL, COLLECT
- 여러 파일에 나누어진 블럭을 한곳에 모아서 출력하는 기능
- 다른 위치에 출력될 블럭은 {COL 블럭명 : "이름값"} ... {END}와 같이 지정
- 이름값은 중복이 가능하다. 즉 여러 블럭을 같은 이름값으로 지정할 수 있다.
- 출력될 위치에는 {COL "이름값"} 의 형식 사용 (콜론이 없음)

# 기타 수정
- 주요 설정값을 compiler에 참조로 전달하도록 수정
- 템플릿 블럭 분리(DIV) 파일 생성을 위한 내부로직 변경 (버퍼링 사용 안함)
- 템플릿 블럭 분리(DIV)에 의해 생성되는 부분 파일에 전처리부분이 포함되지 않도록 수정
- 동일 파일의 중복 컴파일 방지처리 개선 (에러처리 안함)


// v1.3.1 /////////////////////////////////////////////////////////////////////////////////////////
// 2005-07-18

# 블럭명 생략 기능
- 데이터 직접 지정시 주로 사용
  (참고: 블럭명과 데이터를 모두 생략해도 에러를 발생하지는 않음)

# defined(), assigned(), parsed(), tprinted(), fetched() 추가
- 지정 블럭에 대해 각각 define(), assign(), parse(), tprint(), fetch() 실행 여부 반환
- defined()의 경우 특정 블럭의 존재 유무도 확인 가능

# strict 설정값 추가
- 탬플릿 태그와 명령어 사이의 공백 허용 여부
- 기본값은 true (공백 허용 안됨)
- 허용 공백은 스페이스와 탭만 허용 (줄바꿈은 제외시킴)

# 템플릿 참조출력(REF) 변경
- 데이터가 assign된 경우 index값을 처음으로 이동

# assign() 변경
- 지정 데이터를 참조하던 것을 대입으로 변경
- 글로벌 데이터의 경우는 참조 (글로벌 변수는 php자체에서 대입의 경우에도 참조처리함)

# tinclude() 변경
- 템플릿 블럭 분리(DIV)에 의해 생성된 부분파일 include 기능 추가

# 기타/버그 수정
- _index.블럭명 추가 (다른 블럭의 _index 참조)
- 컴파일시 tplRoot 쓰기 퍼미션 체크. 에러시 실행 종료.
- 윈도우환경에서의 경로문제


// v1.3.0p2 ///////////////////////////////////////////////////////////////////////////////////////
// 2005-01-04

# 버그 수정
- parse()를 사용하여 버퍼링하였을 경우 출력시 Fatal Error 발생하는 오류 수정 (v1.3.0p1에만 해당)


// v1.3.0p1 ///////////////////////////////////////////////////////////////////////////////////////
// 2004-12-22

# 버그 수정
- 글로벌 변수를 assign한 블럭에서 계층적 데이터배열 처리 오류 수정
  (parse() 메소드를 호출하였는지를 체크하는 방법 변경)


// v1.3.0 /////////////////////////////////////////////////////////////////////////////////////////
// 2004-12-03

# 템플릿태그 분석엔진 업그레이드
- 좀 더 지능적이고 정확한 분석 가능
- 템플릿태그를 지정할 수 있도록 변경
- 기본 템플릿태그를 {{ }} 에서 { } 로 변경

# 공통 설정 기능 추가
- masterSetup()에서 처리 (함수 추가됨)
- 공통적인 주요 설정사항을 별도의 파일로 지정할 수 있도록 한 기능
- 설정키(ini 섹션명)를 이용하여 여러 설정을 관리할 수 있음
- SkyTemplate() 인자를 설정키 지정으로 변경 (기존은 root, tplRoot 지정)
- 기존의 Master Filter 기능은 이 기능으로 흡수 (버그도 당근 사라짐 ㅎㅎ)
- ini 설정에서 큰따옴표와 줄바꿈을 사용할 수 없는 문제로 자체 규칙을 만들어 사용
  큰따옴표 : {''}
  줄바꿈 : {\n}

# 타 블럭 변수 참조 추가
- 블럭명과 변수명을 ::(더블콜론)으로 구분 (예: {MAIN::total})
- 해당 블럭의 현재 index에 해당하는 값으로 처리됨
- index를 지정한 변수 참조는 "블럭명.index::변수명"의 형식으로 가능 (예: {MAIN.0::total})
- 주의 : 해당 블럭의 데이터가 assign()되어 있어야 정상 동작함
- 주의 : _size, _col, _mod 값은 기존 방식으로 사용 (예: {_size.MAIN})

# 패치
- .(dot) 처리 보완
  .를 포함한 변수 검출을 위한 정규표현식 보완
  글로벌변수를 위한 .와 문자열연결을 위한 .가 연속으로 나올 경우 처리 보완
- 따옴표 안에서의 변수 적용 보완
  큰따옴표 안에서만 {변수} 형태가 적용되도록 변경
  큰따옴표 안에서의 {변수} escape는 {\변수} 형태로 사용
- webRoot를 기준으로 한 가상절대경로를 지정할 수 있도록 함
  주의 : 실제 웹절대경로가 아닌 webRoot프로퍼티를 기준으로 한 의미상의 가상절대경로임


// v1.2.0 /////////////////////////////////////////////////////////////////////////////////////////
// 2004-11-15

# 캐쉬 기능 추가
- 캐쉬 핸들러 클래스를 이용한 캐쉬 기능 지원
- 파일단위의 캐쉬 기능 (php 파일 include는 제외)
- 다양한 유효 캐쉬 체크 옵션 (유효 시간, 변경 체크 파일, 이벤트 값)
- 캐쉬 제외 블럭(파일을 define한 블럭) 지정 가능
- 캐쉬 아이디를 이용한 다중 캐쉬 지원 (계층적 캐쉬아이디 지정 가능 및 삭제시 활용 가능)

# 블럭 분리 템플릿 명령어 추가
- |, DIV, DIVIDE
- 파일을 분리하는 것과 같은 효과 (실제 파일분리는 옵션처리, 기본값 true)
- 분리된 블럭은 별도의 출력처리를 해주어야 함
- 분리 블럭 처리를 위한 php 파일을 지정할 수 있음 (php 파일 inlcude 처럼 php 파일에 변수 전달 가능)
  활용 예: 메인에서 게시판의 새글 추출 모듈을 호출. 이 때 템플릿 블럭은 메인에서 정의한 분리 블럭을 사용 가능.
  사용 예: {{| NEW_LIST : 'new_list.php?type=1'}}

# 템플릿 파일 include 보완
- 루프아이디를 지정할 수 있도록 변경 (이전 버젼처럼 생략도 가능)
- 루프아이디를 지정한 경우 일반 루프 블럭처럼 assign 및 계층적 배열을 통한 변수 적용 가능
- assign하지 않았을 경우 이전처럼 상위 블럭의 _data가 적용됨
- 파일경로는 root property를 기준으로 하도록 변경됨

# define 기능 추가
- assign 작업을 함께할 수 있도록 수정

# tinclude 보완
- define, assign, tprint를 하나의 함수로 처리 가능

# assign 보완
- global 변수를 사용하는 경우를 명시적으로 지정할 수 있도록 함 (인자가 하나뿐이거나 데이터 값이 true 일경우), define()에서 assign시에도 동일하게 적용
- 데이터값 없이 칼럼수가 지정되었을 때 루프가 돌지 않도록 변경, 데이터값이 true 일 경우는 global 변수를 사용하여 칼럼수만큼 루프처리
- 네번째 인자 추가 (칼럼수 지정했을 경우 칼럼수만큼 루프카 돌지 않았을 경우 멈출지 여부를 지정)

# 루프 처리 보완
- _mod 주요변수 추가
- 데이터가 없어 ELSE 블럭이 처리될 때 global 변수가 기본 데이터로 지정되도록 함

# 표현식 명령어 수정
- 표현식 명령어 =; 대신 ; 만 사용가능하도록 수정

# HTML주석 혼합형 템플릿 태그 보완
- -(dash)의 수를 자유롭게 할 수 있도록 변경
  사용 예: <!------{{@ LIST}}------------------------>

# property
- rewriteRoot, cacheRoot 추가
- Info 추가 (기존 Data, Size, Col, Offset 변경 통합 및 추가)


// v1.1.0 /////////////////////////////////////////////////////////////////////////////////////////
// 2004-10-27

# 블럭 종류 구분 및 기능 추가
- 루프 블럭(2차원 배열 루프), EACH 블럭(1차원 배열 루프), 비 루프 블럭(파일)
- EACH 블럭을 위한 명령어 추가 (%, EACH)
- 글로벌 변수를 사용하는 비 루프 블럭은 assign 하지 않아도 됨
- _key, _value(각각 _index, _data 의 alias), _col 예약 변수 추가
- 블럭 외부에서 _size, _col을 참조할 수 있도록 함 (_size.블럭명, _col.블럭명)
- 1차원 배열을 자동으로 2차원 배열 변환해주는 부분 삭제
- 템플릿에 루프 데이터 직접 지정 기능 추가 (결과가 배열 데이터이어야 하며, 표현식 문법을 따름, 루프아이디와 데이터 표현식을 :(콜론)으로 연결)
- 블럭 파싱 에러 검출 (LOOP,END 또는 IF,END 태그의 짝이 맞지 않을 경우 체크)

# Top 변수처리 변경
- parse, assign에서 지정하던 것을 define에서 지정하도록 변경
- 나중에 define된 것을 우선

# 템플릿 주석 처리 변경
- 중첩이 가능하도록 변경
- 짝이 맞지 않을 경우 짝이 맞는 가장 작은 부분을 주석으로 처리함

# 반복적인 템플릿 파일 include 횟수 제한 없앰
- 재귀 include시의 문제 때문에 제한을 두었으나 템플릿 차원의 문제는 아니라는 판단에서 없앰

# 필터 인수 분석 버그 수정
- 0 지정시 오류 수정
- true, false, null 등 지정 가능토록 수정 (따옴표에 묶인 것은 문자열로 취급)

# 원격지 템플릿 처리 버그 수정
- 원격지 템플릿 지정시 정상 동작하지 않는 문제 수정
- http 만으로 한정
- 컴파일 모드가 true(dynamic)일 경우 simple 모드로 동작함

# tplRewrite 처리 변경
- overwrite 옵션 추가
- overwrite 일 경우 원본 파일 overwrite (기존 방법, 보안 및 원본 유실 문제 있음)
- true 일 경우 tplRoot 아래 _rewrite 디렉토리에 mirror 모드로 파일을 저장

# TagComment 플러그인(PreFilter) 추가
- 템플릿 파일을 브라우저, Dreamweaver, Namo 등의 프로그램으로 직접 보거나 편집할 경우 템플릿 태그로 인해 모양이 깨지는 것을 가능한 막기 위한 일괄적인 HTML 주석처리
- HTML 주석은 템플릿 주석으로 변경된다.
- tplRewrite==true 일때만 동작한다.
- 반드시 주석처리 해야할 변수 패턴 지정 가능

# TplCompiler 플러그인(PreFilter) 수정
- tplRewrite 처리(convert) 처리시 tplRoot 디렉토리까지 처리되는 문제 수정
- tplRewrite 의 overwrite 옵션은 지원하지 않음 (보안 및 원본 유실 우려 때문)

# 기타 사항
- 변수 출력에서 일부 예약 변수(DATA, _data)가 적용되지 않던 버그 수정
- 템플릿 명령어를 기호로 사용할 경우 공백없이 사용가능하도록 변경 (예: {{@LIST}})
- timeOffset 변수 적용 안되던 버그 수정
- 표현식에서 객체 함수 처리 버그 수정 및 변수 처리 보완 (예약변수라도 사용법이 맞지 않은 경우는 일반 변수로 처리)
- 상수 처리 추가 (c.상수명)


// v1.0.0 ////////////////////////////////////////////////////////////////////////////////////////
// 2004-10-12

 # 템플릿 블럭 출력 기능 추가
- &, REF, REFER
- 템플릿 블럭명을 지정하여 해당 블럭을 출력하는 기능
- 템플릿 파일 내의 블럭을 자유롭게 접근 가능

# 파일 덤프 기능 추가
- ], DUMP, DUMPFILE
- 파일 내용을 그대로 덤프
- 템플릿 태그, PHP 태그들을 적용하지 않고자 할 경우 사용

# 전처리 기능 추가
- !, DEF, DEFINE
- PHP to Template 처리(Forward)의 반대개념으로 Template to PHP 처리(Backward)를 위한 기능. 쉽게 말하자면 템플릿 파일에서 사용할 변수등을 직접 지정하고 PHP에서 사용토록 하는 방식
- 템플릿 define시 실행

# 비출력 표현식 기능 추가
- =;, EXP;, EXPRESSION;
- 기존 표현식 명령어 + ;(세미콜론)
- 출력을 시도하지 않는 점만 빼고는 표현식 명령어와 동일

# 필터 기능 개선
- 변수명 변경 : inputFilter -> preFilter, outputFilter -> postFilter
- 필터에 인자 지정 가능
- MasterFilter 지정 가능

# PHP 파일 include 기능 개선
- 변수 지정 가능

# 표현식 문법 변경
- 표현식을 이용한 경로 지정시 따옴표 생략할 수 없도록 변경

# 설정 옵션 변경
- webRoot 지정 기능 추가 (상대 경로 가능)
- webRoot에 의한 템플릿 파일명 조정 기능 추가
- tplDepth 옵션 삭제
- mirror 옵션 추가 (디렉토리 구조로 컴파일 파일 저장 기능)
- compile 옵션 추가 (simple, dynamic)

# 기타 사항
- getUniqueName() 처리 방법 변경 (crc32)
- BearTemplateSyntax 필터 보완
- PathRewrite 필터 추가
- Batch Compiler 추가


// v1.0.0RC1 //////////////////////////////////////////////////////////////////////////////////////
// 2004-10-05

# 최초 릴리즈