2009년 6월 8일 월요일

notepad2 컴파일 삽질기 부록#4 : AutoHotkey 스킴 추가

Zach Thibeau님께서 공개하신 AutoHotkey 스킴을 지원토록 수정된 소스를 설명한 글로, Zach님의 허락[footnote]정확히는 Zach님께서 코드를 작성하신 것은 아니라고 함. 다른 분이라는데, 누군지 확인은 못함.[/footnote]하에 올림.


Notepad2 용 AutoHotkey 스킴을 원하시는 분들이 계시던데, AutoHotkey 포럼에 Zach Thibeau님께서 수정된 소스를 공개하셨다.
하지만, 이 소스는 3.0.20 기반으로 되어있으며, 3.1.21.5 기반의 수정은 별도로 공개되어 있지 않다.
그래서 Zach님께서 어떻게 AutoHotkey 스킴을 수정하셨는가하는 방법을 설명하겠다.

이 수정은 (비록 Notepad2 컴파일 삽질기의 일부이지만) 지금까지의 수정을 하나도 하지 않은 상태에서도 적용이 가능하다.

1. SciLexer.h 수정

SciLexer.h는 전체가 #define 문으로 이루어져 있다.
여기에 아래의 내용을 추가한다.

#define SCLEX_AHK1 98
#define SCE_AHK_DEFAULT 0
#define SCE_AHK_COMMENTLINE 1
#define SCE_AHK_COMMENTBLOCK 2
#define SCE_AHK_ESCAPE 3
#define SCE_AHK_SYNOPERATOR 4
#define SCE_AHK_EXPOPERATOR 5
#define SCE_AHK_STRING 6
#define SCE_AHK_NUMBER 7
#define SCE_AHK_IDENTIFIER 8
#define SCE_AHK_VARREF 9
#define SCE_AHK_LABEL 10
#define SCE_AHK_WORD_CF 11
#define SCE_AHK_WORD_CMD 12
#define SCE_AHK_WORD_FN 13
#define SCE_AHK_WORD_DIR 14
#define SCE_AHK_WORD_KB 15
#define SCE_AHK_WORD_VAR 16
#define SCE_AHK_WORD_SP 17
#define SCE_AHK_WORD_UD 18
#define SCE_AHK_VARREFKW 19
#define SCE_AHK_ERROR 20



2. KeyWords.cxx

이 파일의 맨 끝부분은 아래와 같이 문법 스킴들을 링크하는 코드가 들어있다.

    LINK_LEXER(lmVHDL);
    LINK_LEXER(lmXML);
    LINK_LEXER(lmYAML);

//--Autogenerated -- end of automatically generated section

    return 1;
}

이 LINK_LEXER의 맨 아래에 아래와 같을 한 줄을 추가한다.

    LINK_LEXER(lmAHK1);



3. LexAHK1.cxx 파일 추가

Zach님께서 공개하신 소스 파일 중에서 LexAHK1.cxx 파일을 추출해서 같은 폴더에 저장한다.
저장 위치는 소스\scintilla\src.
그리고, Fileview에도 추가한다. 추가 위치는 Scintilla/src.

압축 파일의 해제가 번거로우시면 아래 코드를 사용해도 된다.

LexAHK1.cxx 소스 보기..




4. Styles.h의 수정

문법 스킴의 개수가 적힌 줄을 찾는다
아래와 같은 모양이다.

// Number of Lexers in pLexArray
#define NUMLEXERS 27

여기 적힌 개수를 하나 증가시킨다.
여기서는 27+1 = 28, 28을 적는다.
결과는 아래와 같다.

#define NUMLEXERS 28



5. Styles.c의 수정 1/2

Zach님께서 공개하신 소스 파일 중에서 Styles.c 파일에서 KEYWORDLIST KeyWords_AHK = { ... } 부분과 EDITLEXER lexAHK1 = { ... } 부분을 같은 위치에 추가한다.
정확한 추가 위치는 아래 코드의 앞부분이다.

// This array holds all the lexers...
PEDITLEXER pLexArray[NUMLEXERS] =

역시 압축 파일의 해제가 번거로우면 아래 코드를 사용해도 된다.

more..




6. Styles.c의 수정 2/2

앞의 5항에서 추가한 위치의 코드는 아래와 같은 모양이다.

// This array holds all the lexers...
PEDITLEXER pLexArray[NUMLEXERS] =
{
  &lexDefault,
  &lexHTML,
  //   :
  //중간 생략
  //   :
  &lexASCII
};

이 내용의 끝에 &lexAHK1을 추가한다. 아래와 같은 모양이 된다.

  &lexASCII,  // 앞의 코드 끝에 컴마(,)를 추가함
  &lexAHK1
};

이렇게 수정된 결과는 아래와 같다.

사용자 삽입 이미지

짜잔~ 이제 3.1.21.5-rc4에서도 AutoHotkey 스킴을 깔끔하게 지원한다



댓글 2개:

  1. 결국 오토핫키까지... 사실 최초로 이거 해달라고 했던 분은 걍 지나가다 슬쩍 던진 말이었는데 결국 이렇게 되는군요ㅋ 이렇게 될 줄 알았다능ㅋㅋ



    이모티콘을 보니까 갑자기 아이디어가 하나 생각났습니다. 나중에 정리해서 한방에 질문 올리도록 하지요:P

    답글삭제
  2. @okto - 2009/06/09 09:09
    필요는 발명의 어머니라능~

    답글삭제