- Notepad2 4.2.25를 컴파일하기 전 준비사항
- 컴퓨터야그/notepad2
- 2011. 3. 13. 02:40
1. 컴파일 환경 구축
2. 버그 수정 #1 Edit.c (src\)
3. 버그 수정 #2 Styles.c (src\)
4. Catalogue.cxx (scintilla\src)
5. 문자열 수정 version.h (src\)
이것으로 컴파일 준비는 거의 끝났다.
마지막으로 wdkbuild\make.cmd에 WDKBASEDIR의 위치를 정확히 지정한 뒤 make.cmd i386만 입력하면 된다.
이전 버전과 달리 Notepad2 4.2.x는 Visual C++ v6.0으로는 컴파일되지 않는다.
Florian Balmer 님의 말씀에 의하면 VC6은 새로운 STL 라이브러리를 사용할 수 없기 때문이라고 한다.
새로운 STL 라이브러리 덕분에 일부 상황에서 엄청나게 느려지는 문제가 해결되었다.
(엔터 없는 엄청나게 긴 문장을 기존 버전의 Notepad2로 읽으면 이 문제를 경험할 수 있음)
대신 컴파일러로 WDK(Windows Driver Kit)를 사용해야 한다.
MS 홈페이지에서 다운받아 설치한다.
Florian Balmer 님의 말씀에 의하면 VC6은 새로운 STL 라이브러리를 사용할 수 없기 때문이라고 한다.
새로운 STL 라이브러리 덕분에 일부 상황에서 엄청나게 느려지는 문제가 해결되었다.
(엔터 없는 엄청나게 긴 문장을 기존 버전의 Notepad2로 읽으면 이 문제를 경험할 수 있음)
대신 컴파일러로 WDK(Windows Driver Kit)를 사용해야 한다.
MS 홈페이지에서 다운받아 설치한다.
2. 버그 수정 #1 Edit.c (src\)
아래와 같은 행을 찾아서
아래와 같이 수정한다.
(이 부분은 예전 패치와 약간 다름. 이렇게 패치해야 순정 Notepad2와 완벽히 동일해짐) 1
if (!bAlphaNumeric && (!StrChr(L"'??,pszTextW[i]) || bWordEnd)) {
아래와 같이 수정한다.
(이 부분은 예전 패치와 약간 다름. 이렇게 패치해야 순정 Notepad2와 완벽히 동일해짐) 1
static unsigned char ucQuotes[] = {0x27, 0x00, 0x19, 0x20, 0x60, 0x00, 0xB4, 0x00, 0x00, 0x00};
if (!bAlphaNumeric && (!StrChr((const wchar_t*)ucQuotes,pszTextW[i]) || bWordEnd)) {
3. 버그 수정 #2 Styles.c (src\)
Notepad2/Scintilla에는 약간 이상한 버그가 하나 있다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, 본질적으로 Scintilla 쪽 버그라 손을 안 대겠단 답을 들었음)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont() 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 내용을 찾아서
아래와 같이 수정한다.
다음으로 아래와 같은 내용을 찾아서
아래와 같이 수정한다.
글꼴을 지정하는 과정에서 charset이 0으로 기록되면 다른 프로그램으로의 복사/붙이기가 정확하게 이루어지지 않는다.
(okto님께서 Notepad2 제작자에게 문의를 하셨지만, 본질적으로 Scintilla 쪽 버그라 손을 안 대겠단 답을 들었음)
이 문제를 간단히 해결하기 위해 charset이 0인 경우는 기록하지 않도록 수정한다.
BOOL Style_SelectFont() 메쏘드의 두 군데를 수정하면 된다.
우선, 아래와 같은 내용을 찾아서
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);
}
4. Catalogue.cxx (scintilla\src)
Notepad2는 Scintilla의 모든 lexer를 사용하지는 않는다.
따라서, 사용하는 lexer 외엔 막아두어야 한다.
Catalogue.cxx의 마지막 부분은 LINK_LEXER(...)가 97개나 등장한다.
여기를 몽땅 지우고, 다음 내용으로 대체한다.
따라서, 사용하는 lexer 외엔 막아두어야 한다.
Catalogue.cxx의 마지막 부분은 LINK_LEXER(...)가 97개나 등장한다.
여기를 몽땅 지우고, 다음 내용으로 대체한다.
LINK_LEXER(lmAsm);
LINK_LEXER(lmBatch);
LINK_LEXER(lmConf);
LINK_LEXER(lmCPP);
LINK_LEXER(lmCss);
LINK_LEXER(lmDiff);
LINK_LEXER(lmHTML);
LINK_LEXER(lmMake);
LINK_LEXER(lmNull);
LINK_LEXER(lmPascal);
LINK_LEXER(lmPerl);
LINK_LEXER(lmPowerShell);
LINK_LEXER(lmProps);
LINK_LEXER(lmPython);
LINK_LEXER(lmSQL);
LINK_LEXER(lmVB);
LINK_LEXER(lmVBScript);
LINK_LEXER(lmXML);
5. 문자열 수정 version.h (src\)
기능과는 별 관계가 없지만, 2번과 유사한 이유로 ⓒ가 제대로 표시되지 않고 ?로 표시되는 문제가 있다.
이 문제를 해결하려면 아래와 같은 내용을 찾아서
아래와 같이 수정한다.
참고로, 해당 문자들은 문자 인코딩을 Windows-1252로 변경하면 제대로 볼 수 있다.
이 문제를 해결하려면 아래와 같은 내용을 찾아서
#define VERSION_LEGALCOPYRIGHT_SHORT L"Copyright ?2004-2011"
#define VERSION_LEGALCOPYRIGHT_LONG L"?Florian Balmer 2004-2011"
아래와 같이 수정한다.
#define VERSION_LEGALCOPYRIGHT_SHORT L"Copyright ⓒ2004-2011"
#define VERSION_LEGALCOPYRIGHT_LONG L"\0251Florian Balmer 2004-2011"
참고로, 해당 문자들은 문자 인코딩을 Windows-1252로 변경하면 제대로 볼 수 있다.
이것으로 컴파일 준비는 거의 끝났다.
마지막으로 wdkbuild\make.cmd에 WDKBASEDIR의 위치를 정확히 지정한 뒤 make.cmd i386만 입력하면 된다.
- Florian Balmer는 스위스인인데, 아마도 스위스어(독일어)에서는 조금 다른 따옴표도 쓰이는 것 같다. 순정 Notepad2는 4가지의 따옴표를 인식한다 [본문으로]
'컴퓨터야그 > notepad2' 카테고리의 다른 글
Scintilla 2.25의 LexCPP를 쓰려면 약간 수정을… (1) | 2011.03.24 |
---|---|
Notepad2 4.2.25-rc6 패치 모음 (0) | 2011.03.20 |
Notepad2 4.2.25 패치 준비#2: 북마크 기능 추가 (2/2) (0) | 2011.03.13 |
Notepad2 4.2.25 패치 준비#2: 북마크 기능 추가 (1/2) (0) | 2011.03.12 |
Notepad2 4.2.25 패치 준비#1: 코드 폴딩 추가 (0) | 2011.03.12 |
Recent comment