http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html
Tools > Packages > Package Development > New Syntax Definition 로 시작하자. uuid 를 생성하기 위해서라도 이 메뉴를 통해 시작해야 한다.
그래서 여기에서 생성되는 uuid 를 가지고 .json 파일을 만들고 이녀석을 .plist 로 변환하고, 이 변환한 파일의 확장자를 .tmLanguage 로 변환해서 Package folder 에 넣으면 된다.
순서
- Tools > Packages > Package Development > New Syntax Definition
- .json 로 저장
- .json 을 .plist 로 변환(AAAPackageDev package 를 이용하면 된다. Package Control을 이용하자.)
- 확장자를 .tmLanguage 로 바꿈.
- Packages 폴더로 copy : c:\Users\namh\AppData\Roaming\Sublime Text 2\Packages\MyStyle\MyStyle.tmLanguage
scope
첫 scope 의 이름은 text.<lang_name> 이나 source.<lang_name> 으로 시작한다.[ref. 1]이것은 java 의 package 나 python 의 module 같은 개념이다. 그래서 text.html 이라면 text 라는 package 안에 있는 html 이라는 뜻으로 받아드리면 되겠다.
이 scope 는 textMate 의 scope 의 개념을 가져왔다고 한다.
이 scope 를 이용해서 원하는 설정을 쉽게 가져올 수 있다. 아래 예제에서 name 에 쓰여져 있는 것들이 scope 이다. match 와 맞는 string 이 있으면 name 에 정의된 scope 의 syntax color 를 입히게 된다.
이 color 에는 scope 이 hardcoded 되어 있다. 그래서 특정 scope 을 사용하면 특정 color 가 나오게 된다. 그렇다고 해도 모든 scope 이 다른 color 를 가지고 있다는 것은 아니다.[ref. 1]
captures 는 regular expression 의 group 같은 개념이다. 그래서 ()(괄호) 로 묶여 있는 부분이 하나의 group 이 된다. 그것을 capture 에서 사용하는 것이다.
"captures": { "1": { "name": "constant.numeric.myst" } },같은 경우는 match 중에 1번째 group 을 constant.numeric.myst 에 mapping 한다는 뜻이다.
begin, beginCaptures / end, endCaptures
begin, beginCaptures / end, endCaptures 는 html tag 같은 요소나 {} 처럼 시작 부분과 끝부분의 경계가 있는 경우에 사용하면 된다.include
여기서"patterns": [ { "include": "$self" },include : "$self" 는 begin 부분을 제외한 나머지 부분을 넘겨주는 역할을 한다.
syntax 예제
위의 syntax definition 에 대한 실제 결과이다.{ "name": "My Style", "scopeName": "source.mysty", "fileTypes": ["mysty", "myst"], "patterns": [ { "match": "\\$\\d+", "name": "keyword.source.mysty", "comment": "Tab stops like $1, $2..." }, { "match": "\\$([A-Za-z][A-Za-z0-9_]+)", "name": "keyword.source.myst", "captures": { "1": { "name": "constant.numeric.myst" } }, "comment": "Variables like $PARAM1, $TM_SELECTION..." }, { "name": "variable.complex.myst", "begin": "(\\$)(\\{)([0-9]+):", "beginCaptures": { "1": { "name": "keyword.myst" }, "3": { "name": "constant.numeric.myst" } }, "patterns": [ { "include": "$self" }, { "name": "string.myst", "match": "." } ], "end": "\\}" }, { "name": "invalid.ssraw", "match": "(\\$|\\<|\\>)" } ], "uuid": "c6771482-091a-4821-8f64-33e38564fc09" }
댓글 없음:
댓글 쓰기