이전 글에서 계속됨



2. 개발 언어 및 라이브러리 결정


js의 기본 자료형은 굉장히 많은 기능을 자연스럽게 제공한다.

var a=[];

선언 만으로도 동적배열 및 스택으로 활용할 수 있다.


문자열은 유니코드 형식을 기본으로 지원한다.

게다가, 무적의 정규식이 문자열 처리 코드를 간략하게 해준다.


Notepad2는 C 및 C++로 작성되었으며, 코어 쪽은 C로 개발되어있다.

따라서, C++보단 C를 사용하는 게 Notepad2에선 조금 더 자연스럽다.


그런데, C엔 동적배열 같은 건 없고, 메모리는 malloc()/free()를 일일이 해줘야 된다.

사실상 문자열이라는 자료형은 없으며, wchar_t의 1차원 배열로 문자열을 흉내내야 한다.

정규식? 그게 뭥미.


그렇다고 C++에서 작업한다고 뭔가 크게 변하는 것은 아니다.

vector, string/wstring 클래스를 사용해도 js의 기능을 모두 지원받을 수는 없다.

여전히, 정규식을 쓸 수가 없어 원 소스의 정규식 부분은 별도 함수로 구현해야 한다.



3. 코딩


구글 코드 홈페이지에서 Zen-Coding 소스를 다운받는 것으로 시작했다.

Tortoise SVN을 사용해서 소스를 몽땅 다운받으려 했다.


그런데,다운이 잘 되지 않았다. 파일명 중에 더하기(+)가 있어 제대로 다운받아지지 않는다.

일부만 받다보니 어디까지가 변환해야될 범위인지 분석하기도 어려웠다. OTL


일단 다운받은 내용을 기반으로 시제 코드를 작성해봤다.



a. 1차 도전, 그리고 실패


언어는 일단 C로 정했다.

무엇보다 (비록 VC++ 6보다는 나아졌다고는 하지만) STL에 문제가 많아 못믿겠다는 점.

역시 직접 malloc-realloc-free를 하는 게 좋을 것 같다는 편견 작렬.


그런데, 1차 변환을 완료하고 나서 보니 변환한 원본 소스가 0.5.x다[각주:1].

게다가 뭔가 제대로 동작하지 않는다는 치명적인 문제도 있었다.



b. 2차 도전


SVN으로 받지 않고, Zen.Coding-textarea.v0.7.1.zip을 다운받으면 되는 걸 뒤늦게 알아차렸다.

그리고, 이전 경험을 기반으로 소스 전체를 다시 탐독(?)했다.


그러면서 변환에 대한 방향을 명확히 잡았다.


- 개발 언어는 C++로 변경

- 각종 자료형은 wstring와 vector를 활용하여 class 형태로 구현

- 정규식은 모두 정리해서 별도 함수로 구현

- js의 특성을 십분 활용해 구현한 기능들은 C++에 맞게 재작성

- 기타 1차 도전에서 잘못 잡은 개념들 확인



4. 개발 환경 결정


소스는 버전관리를 쉽게 하기 위해 구글 코드에서 관리하기로 했다.

그리고, 개발 환경은 VC++ 6[각주:2]으로 하기로 했다.


그런데… VC++ 6은 ANSI 코드만 인식한다.

Google Code에서는 UTF-8만 인식하기 때문에 한글이 제대로 표시되지 않는다.


그래서, VS 2010 Express[각주:3]로 개발환경을 변경했다.

그런데, 쓰다보니 VS 2010 Ex의 인텔리센스CLI 소스에선 동작하지 않는 문제가 있었다.


게다가, VS 2010 Ex의 깨알같은 버그를 하나 찾았다.

다음과 같은 행이 있는 소스를 UTF-8로 저장하면 컴파일이 제대로 되지 않는다[각주:4].

// parseAbbreviation() 먼저 분석할 것

정식버전은 모르겠지만, Express Edition은 그랬다. OTL


eclipse!


결국 UTF-8을 인식하며 CLI 개발도 지원해주는 환경인 eclipse로 환경을 다시 변경했다. OTL

이 경우의 커다란 문제는 디버깅을 할 수 없다는 것이다[각주:5].



다음 글에서 계속…

  1. 최신 버전은 0.7.1임 [본문으로]
  2. 일단, 내가 가진 유료 개발툴이 VC++ 6 밖에 없음. OTL [본문으로]
  3. 무료의 힘은 무서움. ㅎ [본문으로]
  4. 정확히는 이 다음에 들어가는 괄호를 혼동함 [본문으로]
  5. 내가 하는 방법을 못 찾아서 그럴 수도 있음 [본문으로]
신고

+ Recent posts