Notepad2가 3.1.21 최종판이 드디어 공개되었다.
이에 따라 3.2.21의 한글입력기 등의 패치 방법을 설명한다.
(이 패치는 Scintilla 라이브러리도 함께 수정하기 때문에 Notepad2의 정식패치가 될 가망은 없음)
notepad2 컴파일 삽질기 1++ : 기본적인 오류 수정(3.1.21.5-rc4용)에서 3.1.21-rc4의 소스를 수정하는 방법을 설명했는데, 3.1.21 정식버전에서 아주 조금 바뀌었다.
3.1.21의 소스를 Visual C++ v6.0에서 컴파일할 수 있도록 수정하는 방법을 설명하겠다.
0. 들어가기 전에
다음과 같은 내용은 모두 준비가 되어있다고 가정하고 설명함.
a. Visual C++ v6.0 및 Service Pack 6 설치
b. Platform SDK 설치 (Windows® Server 2003 R2 Platform SDK ISO Download)
c. Scintilla 1.78 다운로드
d. np2-3.1.21-build_vc6.patch 적용
a. Visual C++ v6.0 및 Service Pack 6 설치
b. Platform SDK 설치 (Windows® Server 2003 R2 Platform SDK ISO Download)
c. Scintilla 1.78 다운로드
d. np2-3.1.21-build_vc6.patch 적용
1. Edit.c 수정(예전 패치 그대로임)
void EditTitleCase(HWND hwnd) 메쏘드에서
이건 소스 쪽 오타다. ㅠ.ㅠ (이건 정말 왜 수정하지 않을까?)
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'?,pszTextW[i])) {라는 행을 찾아
if (!IsCharAlphaNumericW(pszTextW[i]) && !StrChr(L"'",pszTextW[i])) {로 바꿔준다.
이건 소스 쪽 오타다. ㅠ.ㅠ (이건 정말 왜 수정하지 않을까?)
2. Styles.c 수정(약간 수정되었음)
Notepad2/Scintilla에는 약간 이상한 버그가 하나 있다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, Scintilla 쪽 버그라 손을 안 대겠단 답을 들었음)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle) 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 부분을 찾는다.
다음으로 이렇게 생긴 부분을 찾는다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, Scintilla 쪽 버그라 손을 안 대겠단 답을 들었음)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle) 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 부분을 찾는다.
if (bDefaultStyle &&이곳을 아래와 같이 고쳐준다.
lf.lfCharSet != DEFAULT_CHARSET &&
lf.lfCharSet != ANSI_CHARSET &&
lf.lfCharSet != iDefaultCharSet) {
lstrcat(szNewStyle,L"; charset:");
wsprintf(tch,L"%i",lf.lfCharSet);
lstrcat(szNewStyle,tch);
}
if (bDefaultStyle &&
lf.lfCharSet != DEFAULT_CHARSET &&
lf.lfCharSet != ANSI_CHARSET &&
lf.lfCharSet != iDefaultCharSet &&
lf.lfCharSet) {
lstrcat(szNewStyle,L"; charset:");
wsprintf(tch,L"%i",lf.lfCharSet);
lstrcat(szNewStyle,tch);
}
다음으로 이렇게 생긴 부분을 찾는다.
if (Style_StrGetCharSet(lpszStyle,&iValue))이곳은 이렇게 고친다.
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"charset:%i",iValue);
lstrcat(szNewStyle,tch);
}
if (Style_StrGetCharSet(lpszStyle,&iValue) && iValue)
{
if (lstrlen(szNewStyle))
lstrcat(szNewStyle,L"; ");
wsprintf(tch,L"charset:%i",iValue);
lstrcat(szNewStyle,tch);
}
주말에는 시간내서 파일 연결 부분을 조금 수정을 해보도록 하겠습니다 ^^
답글삭제시간을 더 내면은 ctags 연동으로 tree browser를 만들어 볼까도 하는데 sciltilla를 공부해야 할꺼 같아서
개인 프로젝트로 한번 던져놔 봐야겠습니다 ㅋ
@구차니 - 2009/06/24 18:18
답글삭제무슨 말씀인지 전혀 모르겠어요~ [emo=004]
@BLUEnLIVE - 2009/06/24 18:38
답글삭제함수 추적기능이죠 ㅋㅋ
잘 아시면서 모르는 척 하시면 밥 얻어 먹으러 가겠습니다? ㅋㅋ(한 3일 굶도록 하죠 +_+!)
@구차니 - 2009/06/24 18:18
답글삭제함수 추적은 오로지 두뇌와 눈만을 사용하는 1人 ㅡㅡ;
@BLUEnLIVE - 2009/06/24 19:12
답글삭제천재시군요 -ㅁ-!!!!!!!
저는 ctags나 source insight가 아니면 절대 못해요 ㅠ.ㅠㅠ
@구차니 - 2009/06/24 18:18
답글삭제[q]잘 아시면서 모르는 척 하시면 밥 얻어 먹으러 가겠습니다? ㅋㅋ[/q]
가실때 저한테도 연락을...
@구차니 - 2009/06/24 18:18
답글삭제이번주는 힘들고, 다음주에 모여서 저녁식사는 어떨까요?
구차니님 - 옥토님 - 저 이렇게 말이죠. ^^;
@BLUEnLIVE - 2009/06/24 22:58
답글삭제다음주 중으로 조율을 해보도록 하죠 ㅋㅋ
@구차니 - 2009/06/25 01:01
답글삭제영화를 볼 수 있는 마음가짐으로 경건하게 가도록 하겠습니다. ㅋㅋ 냉장고는 가득가득!
@구차니 - 2009/06/24 18:18
답글삭제집으로 모이시게요?
평일에 집으로 모이시면 귀가길이 좀 복잡하지 않을까요?
평일은 밖에서 모이는 것이 좋을 것 같고, 주말이라면 집이 더 좋을 것 같습니다.
집에서 모여서 식사하고, 영화 한 편 보면 딱이죠~
@BLUEnLIVE - 2009/06/25 01:04
답글삭제가는길이 어떻게 되나요?
1. 분당선으로 한번에 가나요?
2. 아니면 야탑 버스터미널에서 바로 갈 수 있나요?
@구차니 - 2009/06/24 18:18
답글삭제집은 용인 버스터미널까지 오시면 픽업하러 갈 수 있습니다.
전 거의 항상 차를 갖고 다녀 버스는 잘 모르겠습니다. ㅡㅡ;
야탑 버스터미널에서 바로 가실려면 야탑 버스터미널 앞에서 820번 버스 타시고 종점까지 가시면 됩니다~
답글삭제시간은 약 1시간 20~ 30분 정도... OTL
그래도 갈아타고 가시는 것 보다는 820번 버스를 타고 종점에 가시면 거기가 용인버스터미널입니다.
거기에서 bluenlive 님을 콜!! 하시면 되겠네요~ ㅋㅋ
@oneniner - 2009/06/25 09:09
답글삭제오~ 살아있는 버스 노선표... ㅎㅎㅎ